我可以在命令之间切换,并从不同的目录运行程序吗?

时间:2012-02-22 12:38:18

标签: bash shell

我有一个特定的命令,根据当前工作目录的内容做出不同的反应。 我现在希望将这个程序重新发送回自己,然后将调用发生在不同的目录中。

在“伪bash”中,我想要

command arg1 | cd /other dir | command arg2

我个人使用bash,但如果它有助于使用不同的shell,我愿意接受建议。 :)

我意识到有一个非常简单的临时文件或命名管道的解决方法,但我想知道是否有办法在一个命令中执行此操作。

3 个答案:

答案 0 :(得分:6)

command arg1 | ( cd /other_dir ; command arg2 )

(…)在子shell中执行命令。 cd是一个shell内置命令,而不是“真正的进程”。 ( cd X ; command )将启动一个新的子shell,cd进入X,然后运行commandcommand作为进程运行,但在另一个目录中运行。

展望未来最好有一个可以将目录作为参数的命令(如果没有定义,则默认为当前工作目录)。然后你可以得到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