我有一个从特定目录调用的常用命令。这个程序只有一个可执行文件位于/bin中,当前工作目录对于正确运行它非常重要。脚本会影响它运行所在目录中的文件。现在,我还有一个定制的shell脚本,它在一个目录中执行一些操作,但是我需要调用上面提到的命令,就好像它在另一个目录中一样。如何在shell脚本中执行此操作?
zbdgwd5y1#
current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
1.我们将变量current_dir设置为等于您的pwd1.之后,我们将转到cd,您需要在其中运行命令1.那么我们将运行命令1.然后我们返回到变量cd或者
current_dir
pwd
cd
pushd && cd /path/to/your/command/dir && special command ARGS && popd
由@apieceofbart和@康斯坦丁提供
nvbavucw2#
只是一个小提示有用的信息:这会将shell目录更改为~/project
~/project
function mymake() { cd ~/project && make $1 }
这不会
function mymake() { (cd ~/project && make $1) }
奔跑
mymake something
m3eecexj3#
在子shell中使用cd;使用这种子shell的简写方法是括号。
(cd wherever; mycommand ...)
也就是说,如果你的命令有它所需要的环境,它应该真正地确保环境本身,而不是把责任放在任何可能想要使用它的东西上(除非它是一个内部命令,在一个定义良好的大型系统的上下文中,在非常特定的情况下使用,这样任何调用者都需要确保它所需要的环境)。
hmtdttj44#
(cd /path/to/your/special/place;/bin/your-special-command ARGS)
uemypmqf5#
为此,您可以使用cd内置函数,或者pushd和popd内置函数。例如:
pushd
popd
# do something with /etc as the working directory cd /etc : # do something with /tmp as the working directory cd /tmp :
您可以像使用任何其他命令一样使用内置函数,并且可以在脚本中任意多次更改目录上下文。
5条答案
按热度按时间zbdgwd5y1#
如果要返回当前工作目录:
1.我们将变量
current_dir
设置为等于您的pwd
1.之后,我们将转到
cd
,您需要在其中运行命令1.那么我们将运行命令
1.然后我们返回到变量
cd
或者
由@apieceofbart和@康斯坦丁提供
nvbavucw2#
只是一个小提示有用的信息:
这会将shell目录更改为
~/project
这不会
奔跑
m3eecexj3#
在子shell中使用
cd
;使用这种子shell的简写方法是括号。也就是说,如果你的命令有它所需要的环境,它应该真正地确保环境本身,而不是把责任放在任何可能想要使用它的东西上(除非它是一个内部命令,在一个定义良好的大型系统的上下文中,在非常特定的情况下使用,这样任何调用者都需要确保它所需要的环境)。
hmtdttj44#
uemypmqf5#
为此,您可以使用
cd
内置函数,或者pushd
和popd
内置函数。例如:您可以像使用任何其他命令一样使用内置函数,并且可以在脚本中任意多次更改目录上下文。