Bash如何在不同的目录上下文中执行命令?
我有一个共同的命令,从非常特定的目录中调用。 该程序只有一个可执行文件位于/ bin中,而且当前工作目录对于正确运行它非常重要。 该脚本会影响其运行目录内的文件。
现在,我也有一个自定义的shell脚本,在一个目录中执行某些操作,但是我需要将上面提到的那个命令调用,就好像它在另一个目录中一样。
你如何在shell脚本中做到这一点?
你可以使用cd
内build,或pushd
和popd
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;
- 我们正在设置一个variables
current_dir
等于你的pwd
- 之后,我们要
cd
到你需要运行你的命令 - 那么我们正在运行命令
- 那么我们将要回到我们的variables
current_dir
请享用