在 shell 脚本中调用 Pushd

在 shell 脚本中调用 Pushd

我有一个简单的脚本,我想调用“push”,然后调用另一个命令。但脚本中的“pushd”命令似乎并没有超出脚本范围。

有什么方法可以使其在 shell 终端中执行?

#!/bin/sh

pushd $1
time

我真正想要完成的是调用,pushd然后other-command使用一个命令。

答案1

/bin/sh在本例中,shell 脚本通常在 shell 程序的单独实例中执行。您的pushd命令仅影响该子 shell 的工作目录。否则,从 shell 运行的任何程序都可能会扰乱 shell 的工作目录。

要在当前 shell 中执行该脚本,请改为:

$ . my-command somedir

或者,更详细地说:

$ source my-command somedir

为了使您的程序看起来像其他程序一样工作,您可以使用别名:

$ alias mycmd='source my-command'
$ mycmd /bin
$ pwd
/bin

答案2

脚本无法更改其父进程的环境。因此,脚本中所做的任何环境更改都会丢失。

要在同一进程中运行脚本,您可以像这样“获取”脚本

. /path/to/script.sh args

答案3

函数比 shell 脚本更适合这种操作,尤其是在使用 Pushd 时。

将其添加到.bashrc

foo() {
    pushd $1
    time
}
export foo

在外壳中:

$ foo mydir1

输出:

~/mydir1 ~

real    0m0.000s
user    0m0.000s
sys     0m0.000s

相关内容