หากคุณไม่ต้องการที่cd
จะติดหลังจากการทดแทนนามแฝงใช้ subshell กับ(
y )
:
alias my_x="(cd /home/path_to_x && ./x)&"
คุณสามารถตรวจสอบกับ
alias test_y="(cd /tmp && sleep 10 ) & "
โปรดทราบว่าการแก้ปัญหา
alias my_y="/home/path_to_x/x"
ไม่เทียบเท่าที่แน่นอน ในความเป็นจริงถ้าเรียกว่าผ่านmy_x
การx
โปรแกรมจะดำเนินการกับไดเรกทอรีปัจจุบัน/home/path_to_x/
ในขณะที่ถ้าเรียกตามmy_y
, x
มีการเรียกใช้กับไดเรกทอรีปัจจุบันซึ่งเป็นหนึ่งในที่คำสั่งmy_y
ออกมา สิ่งนี้อาจมีความสำคัญหรือไม่ขึ้นอยู่กับสิ่งที่x
กำลังทำ
เกี่ยวกับโซลูชัน OPมันทำงานในbash
:
romano@RRyS:~$ pwd
/home/romano
romano@RRyS:~$ alias x="cd /bin && ./echo A >/dev/null &"
romano@RRyS:~$ x
[1] 16611
romano@RRyS:~$ pwd
/home/romano
แต่ไม่ใช่ในzsh
:
[romano:~] % pwd
/home/romano
[romano:~] % alias x="cd /bin && ./echo A >/dev/null &"
[romano:~] % x
[1] 16744
[1] + 16744 done ./echo A > /dev/null
1& [romano:/bin] % pwd
/bin
[romano:/bin] %
ดูเหมือนว่า bash และ zsh จะรันรายการในวิธีที่ต่างกัน ... ดังนั้นจึงเป็นการดีกว่าที่จะเพิ่มวงเล็บที่ชัดเจน ... ขอบคุณ @EliahKagan สำหรับการชี้ไปที่ฉัน
alias x='/home/path_to_x/x'
ตั้งชื่อแทนเช่น อย่าใช้ก่อน.
(จุด) หมายถึงไดเรกทอรีปัจจุบัน/home
.