使用Linux shell,如何启动与当前工作目录不同的工作目录的程序?

例如,我有一个二进制文件helloworld,它在当前目录中创建了文件hello-world.txt。 这个文件在目录/a中。

目前,我在目录/b。我想启动我的程序运行..然后在第三个目录/c中获取hello-world.txt。


当前回答

如果您总是希望它到/C,那么在写入文件时使用绝对路径。

其他回答

一个不需要子shell并且内置于bash的选项

(pushd SOME_PATH && run_stuff; popd)

演示:

$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit

从当前目录提供到脚本目录执行命令的完整路径

/root/server/user/home/bin/script.sh

只要把最后一个“&&”改成“;”,不管命令执行成功还是失败,它都会返回cd:

cd SOME_PATH && run_some_command ; cd -

像这样调用程序:

(cd /c; /a/helloworld)

括号会生成一个子shell。然后这个子shell将其工作目录更改为/c,然后从/a执行helloworld。程序退出后,子shell终止,将您返回到父shell的提示符,在您启动的目录中。

错误处理:为了避免在没有改变目录的情况下运行程序,例如,当拼写错误/c时,使helloworld的执行有条件:

(cd /c && /a/helloworld)

减少内存使用:为了避免在执行helloworld时浪费子shell的内存,可以通过exec调用helloworld:

(cd /c && exec /a/helloworld)

[感谢Josh和Juliano给出的改进这个答案的建议!]]

为什么不简单点呢

cd SOME_PATH &&运行some_command && cd -

最后一个“cd”命令将带您回到最后一个PWD目录。这应该适用于所有*nix系统。