Mar*_*ace 68 bash shell working-directory
我有一个从非常具体的目录中调用的常用命令.此程序的/ bin中只有一个可执行文件,当前工作目录对于正确运行它非常重要.该脚本会影响其运行目录内的文件.
现在,我还有一个自定义shell脚本,可以在一个目录中执行某些操作,但我需要调用上面提到的命令,就像它在另一个目录中一样.
你如何在shell脚本中这样做?
gee*_*aur 171
cd在子壳中使用; 使用这种子shell的简写方法是括号.
(cd wherever; mycommand ...)
Run Code Online (Sandbox Code Playgroud)
也就是说,如果你的命令有一个它需要的环境,它应该真正确保环境本身,而不是将任何可能想要使用它的东西放在那里(除非它是在井的上下文中非常特定的情况下使用的内部命令)定义了更大的系统,这样任何调用者都需要确保它所需的环境.通常这将是某种shell脚本包装器.
bma*_*ies 28
(cd /path/to/your/special/place;/bin/your-special-command ARGS)
Run Code Online (Sandbox Code Playgroud)
Tod*_*obs 28
您可以使用cd内置的,或者pushd和popd建宏用于这一目的.例如:
# do something with /etc as the working directory
cd /etc
:
# do something with /tmp as the working directory
cd /tmp
:
Run Code Online (Sandbox Code Playgroud)
您可以像使用任何其他命令一样使用builtins,并且可以在脚本中多次更改目录上下文.
abc*_*123 15
current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
Run Code Online (Sandbox Code Playgroud)
current_dir等于你的变量pwd cd您需要运行命令的地方cd回到我们的变量current_dir请享用
您还可以使用以下env命令来实现相同的目的,而无需额外的 shell:
env --chdir=/whatever/path -S whatever_command -some -option and any other arguments
Run Code Online (Sandbox Code Playgroud)
whatever_command使用所有相关选项和参数执行的命令或脚本在哪里。这一切都必须遵循命令-S的选项env。
当前工作目录仅针对execvp()系统调用而更改,因此最终它将恢复为原始值。
env是GNUcoreutils包的一部分,可以在此处找到其手册页的副本以获取更多详细信息。
例如,您env还可以使用它来操纵环境变量和仅针对特定执行的信号处理。
这不适用于 shell 别名和 shell 函数,因为env仅适用于程序。
| 归档时间: |
|
| 查看次数: |
84854 次 |
| 最近记录: |