是否可以从脚本更改当前目录?

我想在Bash中创建一个目录导航实用程序。我创建了一个测试脚本,如下所示:

#!/bin/bash
cd /home/artemb

当我从Bash shell执行脚本时,当前目录不会改变。是否有可能从脚本更改当前shell目录?


当前回答

我还创建了一个名为goat的实用程序,您可以使用它来简化导航。

你可以在GitHub上查看源代码。

从v2.3.1开始,使用概述如下所示:

# Create a link (h4xdir) to a directory:
goat h4xdir ~/Documents/dev

# Follow a link to change a directory:
cd h4xdir

# Follow a link (and don't stop there!):
cd h4xdir/awesome-project

# Go up the filesystem tree with '...' (same as `cd ../../`):
cd ...

# List all your links:
goat list

# Delete a link (or more):
goat delete h4xdir lojban

# Delete all the links which point to directories with the given prefix:
goat deleteprefix $HOME/Documents

# Delete all saved links:
goat nuke

# Delete broken links:
goat fix

其他回答

启动脚本时,将创建一个只继承您的环境的新进程。当它结束时,它就结束了。您当前的环境保持不变。

相反,你可以这样开始你的脚本:

. myscript.sh

的。将评估当前环境中的脚本,因此它可能会被更改

我已经做了一个脚本来更改目录。来看看:https://github.com/ygpark/dj

使用pushd,当前目录被推送到目录堆栈上,并被更改为给定的目录,popd获取堆栈顶部的目录并更改为该目录。

pushd ../new/dir > /dev/null
# do something in ../new/dir
popd > /dev/null

这是以上答案的一个简化汇编。 创建shell文件shell .sh 在脚本中,在函数中更改目录

#!/bin/bash

cd folder1/folder2/

现在运行脚本。在这之前。 . 使用当前线程/会话执行脚本。

. shellfile.sh

我还创建了一个名为goat的实用程序,您可以使用它来简化导航。

你可以在GitHub上查看源代码。

从v2.3.1开始,使用概述如下所示:

# Create a link (h4xdir) to a directory:
goat h4xdir ~/Documents/dev

# Follow a link to change a directory:
cd h4xdir

# Follow a link (and don't stop there!):
cd h4xdir/awesome-project

# Go up the filesystem tree with '...' (same as `cd ../../`):
cd ...

# List all your links:
goat list

# Delete a link (or more):
goat delete h4xdir lojban

# Delete all the links which point to directories with the given prefix:
goat deleteprefix $HOME/Documents

# Delete all saved links:
goat nuke

# Delete broken links:
goat fix