我正在尝试使用一个简单的文件来更改用户当前所在的目录。如果我使用 . ./Genesis 运行该文件,则源文件可以正常工作。但我只想使用 ./Genesis 并让 cd 命令工作。我在我的根/脚本文件夹:kyle@computer:~/Scripts
我怎样修改代码才能做到这一点?
我有一个名为 Genesis 的文件,它调用源文件
#!/bin/bash
#Genesis
. ./Genesis.sh
Genesis.sh文件包含以下代码:
jhome() {
cd ~/Scripts/dungeon
}
jhome
答案1
如果您正常运行 shell 脚本而不是执行 source 命令,它将在子 shell 中运行,不会影响您当前的 shell。如果您希望它更改调用它的 shell 的当前工作目录,则必须执行 source 命令。这就是 sourcing 存在的原因。
答案2
为了实现您的目标,您应该寻找除执行在其自己的 shell 中执行的 shell 脚本之外的其他方法,而不会影响调用者的 shell。
您可以执行以下操作之一:
- 将
jhome
函数放入文件中.bashrc
并调用它而不是脚本。 - 在以下位置添加别名
.bashrc
:alias Genesis='cd ~/Scripts/dungeon'
。 - 通过源执行脚本:
. ./Genesis
。