我有一个特定的命令,根据当前工作目录的内容做出不同的反应。 我现在希望将这个程序重新发送回自己,然后将调用发生在不同的目录中。
在“伪bash”中,我想要
command arg1 | cd /other dir | command arg2
我个人使用bash,但如果它有助于使用不同的shell,我愿意接受建议。 :)
我意识到有一个非常简单的临时文件或命名管道的解决方法,但我想知道是否有办法在一个命令中执行此操作。
答案 0 :(得分:6)
command arg1 | ( cd /other_dir ; command arg2 )
(…)
在子shell中执行命令。 cd
是一个shell内置命令,而不是“真正的进程”。 ( cd X ; command )
将启动一个新的子shell,cd进入X,然后运行command
。 command
作为进程运行,但在另一个目录中运行。
展望未来最好有一个可以将目录作为参数的命令(如果没有定义,则默认为当前工作目录)。然后你可以得到command arg1 | command --dir=/other_dir arg2
答案 1 :(得分:2)
如何使用子shell,如下所示:
command arg1 | (cd /other/dir; command arg2)
答案 2 :(得分:1)
管道不起作用。它们只是将数据流(非上下文)从一个命令传递到另一个命令的一种方法。如果您需要管道中的命令在其他上下文中运行,则只需更改subshell中的目录,如@JoachimPileborg所指出的那样。
在* nix shell中解决此问题的规范方法是将相关目录作为参数传递给脚本。您的命令序列将是:
command arg1 .
command arg2 /other/dir