The*_*man 9 command-line alias
我希望创建一个运行程序 x 的别名,而不更改我所在的当前目录。我现在拥有的是:
alias x = "cd /home/path_to_x && ./x"
Run Code Online (Sandbox Code Playgroud)
这有效,但更改了我的目录。我想做的是:
alias x="./home/path_to_x/x
Run Code Online (Sandbox Code Playgroud)
但是后来我没有得到这样的文件或目录。有人知道解决方法吗?
Use*_*ess 14
不要 CD,只需使用其绝对路径运行它
这个版本:
cd /home/path_to_x && ./x
Run Code Online (Sandbox Code Playgroud)
将目录更改为绝对路径(您会看到如何/home/...从根目录开始),然后在相对路径./x(即相对于新工作目录)运行可执行文件。
这个版本:
./home/path_to_x/x
Run Code Online (Sandbox Code Playgroud)
尝试在相对路径运行可执行文件./home/path_to_x/x,这意味着相对于您当前的工作目录现在是什么。这就解释了为什么会出现错误 - 这个相对路径确实不存在。
你想要的命令是:
/home/path_to_x/x
Run Code Online (Sandbox Code Playgroud)
/再次使用绝对路径(从根目录开始)。
哦,你也可以只添加/home/path_to_x到你的PATH而不是创建别名。请参阅:如何在不键入完整路径的情况下运行脚本?
如果您不希望在cd别名替换后保持不变,请使用带有(y的子shell ):
alias my_x="(cd /home/path_to_x && ./x)&"
Run Code Online (Sandbox Code Playgroud)
你可以检查它
alias test_y="(cd /tmp && sleep 10 ) & "
Run Code Online (Sandbox Code Playgroud)
注意解决方法
alias my_y="/home/path_to_x/x"
Run Code Online (Sandbox Code Playgroud)
不完全等效。事实上,如果通过 via 调用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
Run Code Online (Sandbox Code Playgroud)
但不在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] %
Run Code Online (Sandbox Code Playgroud)
bash 和 zsh似乎 以不同的方式执行列表......所以最好添加显式括号......感谢@EliahKagan 将它指向我。
| 归档时间: |
|
| 查看次数: |
20283 次 |
| 最近记录: |