Bash如何在不同的目录上下文中执行命令?

时间:2012-05-12 18:58:03

标签: bash shell working-directory

我有一个从非常具体的目录中调用的常用命令。此程序的/ bin中只有一个可执行文件,当前工作目录对于正确运行它非常重要。该脚本会影响其运行目录内的文件。

现在,我还有一个自定义shell脚本,可以在一个目录中执行某些操作,但我需要调用上面提到的命令,就像它在另一个目录中一样。

如何在shell脚本中执行此操作?

4 个答案:

答案 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内置,或pushdpopd内置来实现此目的。例如:

# 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;
  1. 我们设置的变量current_dir等于您的pwd
  2. 之后我们将cd转到您需要运行命令的地方
  3. 然后我们正在运行命令
  4. 然后我们将cd返回变量current_dir
  5. 享受