无需更改目录即可从任何地方运行程序

无需更改目录即可从任何地方运行程序

我希望创建一个别名,运行程序 x,而不改变我当前所在的目录。我现在拥有的是:

alias x = "cd /home/path_to_x && ./x"

这有效,但会更改我的目录。我希望执行的操作如下:

alias x="./home/path_to_x/x

但我没有得到这样的文件或目录。有人知道解决这个问题的办法吗?

答案1

不要使用 CD,只需使用其绝对路径

此版本:

cd /home/path_to_x && ./x

将目录更改为绝对路径(您会看到如何/home/...从根目录开始),然后在相对的路径./x(即相对于新的工作目录)。

此版本:

./home/path_to_x/x

尝试在相对的路径./home/path_to_x/x,表示相对于无论你当前的工作目录是什么。这就解释了为什么您会收到错误 - 这个相对路径实际上不存在。

你想要的命令是:

/home/path_to_x/x

再次使用绝对路径(从根目录开始/)。

哦,你也可以直接添加/home/path_to_x到你的别名中PATH,而不是创建别名。参见:如何在不输入完整路径的情况下运行脚本?

答案2

如果你不想cd在别名替换后保留,请使用带有(y 的子 shell )

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_xx程序将使用当前目录 运行/home/path_to_x/,而如果通过 调用my_yx程序将使用当前目录(即发出命令的目录)运行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 向我指出这一点。

答案3

如果您要运行的文件已经可执行,为什么不将其添加到 PATH 变量中?

如果你的可执行文件/home/user/aplication/appX只是输入

PATH=$PATH:/home/user/application

至您的~/.bashrc~/.profile

重新启动控制台后,你可以简单地运行它appX

我认为这是最干净的解决方案。

答案4

获取当前密码的备份,并在运行命令后撤消上一个密码。

alias x='dwp=$(pwd) && cd /home/path_to_x && ./x && cd $dwp'

相关内容