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

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

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

你如何在shell脚本中做到这一点?

你可以使用cd内build,或pushdpopd builtins来达到这个目的。 例如:

 # do something with /etc as the working directory cd /etc : # do something with /tmp as the working directory cd /tmp : 

您可以像使用其他命令一样使用builtins,并且可以在脚本中多次更改目录上下文。

在子shell中使用cd ; 使用这种子壳的简写方式是括号。

 (cd wherever; mycommand ...) 

也就是说,如果你的命令有一个它所需要的环境,它应该真的确保环境本身,而不是把任务放在任何可能想要使用的环境上(除非它是在一个井的特定环境下使用的内部命令定义更大的系统,以便任何呼叫者已经需要确保它需要的环境)。 通常这会是某种shell脚本包装器。

 (cd /path/to/your/special/place;/bin/your-special-command ARGS) 

如果你想返回到你当前的工作目录:

 current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir; 
  1. 我们正在设置一个variablescurrent_dir等于你的pwd
  2. 之后,我们要cd到你需要运行你的命令
  3. 那么我们正在运行命令
  4. 那么我们将要回到我们的variablescurrent_dir

请享用