26

我正在编写一个需要cd到某个位置的 shell 脚本。有什么办法可以回到之前的位置,也就是cd执行之前的位置吗?

4

4 回答 4

64

你可以简单地做

cd -

这将带您回到以前的位置。

一些 shell 允许您使用 pushdir/popdir 命令,请查看此站点。您可能还会发现这个SO question很有用。

于 2012-05-18T15:57:11.527 回答
4

如果您在脚本中运行,您还可以在子进程中运行部分脚本,该子进程将具有 $PWD 的私有值。

# do some work in the base directory, eg. echoing $PWD
echo $PWD

# Run some other command inside subshell
( cd ./new_directory; echo $PWD )

# You are back in the original directory here:
echo $PWD

这有其优点和缺点......它确实很好地隔离了目录,但是如果你经常这样做,产生子进程可能会很昂贵。(编辑:正如@Norman Gray 在下面指出的那样,相对于脚本其余部分发生的任何事情,产生子进程的性能损失可能并不是很昂贵)

为了可维护性,我通常使用这种方法,除非我能证明脚本因此而运行缓慢。

于 2012-05-18T16:16:04.193 回答
1

您可以将 PWD 回显到变量中,然后将 cd 返回到该变量。可能会比较安静。

于 2012-05-18T16:05:49.057 回答
0

另一种选择是您可以添加到 .bashrc 中的一小组函数,这些函数允许您转到命名目录:

# cd /some/horribly/long/path
# save spud
# cd /some/other/horrible/path
# save green
...
# go spud
/some/horribly/long/path

这在目录导航生产力工具中有记录,但基本上涉及在上述情况下将“pwd”的输出保存到命名的助记符(“spud”和“green”)中,然后 cd'ing 到文件的内容。

于 2014-02-03T13:47:19.930 回答