我有一个从非常具体的目录中调用的常用命令。此程序的/ bin中只有一个可执行文件,当前工作目录对于正确运行它非常重要。该脚本会影响其运行目录内的文件。
现在,我还有一个自定义shell脚本,可以在一个目录中执行某些操作,但我需要调用上面提到的命令,就像它在另一个目录中一样。
如何在shell脚本中执行此操作?
答案 0 :(得分:160)
在子shell中使用cd
;使用这种子shell的简写方法是圆括号。
(cd wherever; mycommand ...)
也就是说,如果你的命令有一个它需要的环境,那么它应该真正确保环境本身,而不是把责任放在任何可能想要使用它的东西上(除非它是在上下文中非常特殊情况下使用的内部命令)一个定义良好的大型系统,这样任何调用者都需要确保它所需的环境)。通常这将是某种shell脚本包装器。
答案 1 :(得分:25)
(cd /path/to/your/special/place;/bin/your-special-command ARGS)
答案 2 :(得分:23)
您可以使用cd
内置,或pushd
和popd
内置来实现此目的。例如:
# do something with /etc as the working directory
cd /etc
:
# do something with /tmp as the working directory
cd /tmp
:
您可以像使用任何其他命令一样使用builtins,并且可以在脚本中多次更改目录上下文。
答案 3 :(得分:14)
current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
current_dir
等于您的pwd
cd
转到您需要运行命令的地方cd
返回变量current_dir
享受