我有一个位于我某个PATH
位置的 bash 脚本。当我运行该脚本时,它以 结尾,cd /some/location
但由于该脚本在其自己的子进程中运行,因此它不会更改 shell 中的位置。
我知道我可以使用该脚本运行. ./the/script.bash
,甚至可以将其设置为别名,但我想知道是否有办法从我的脚本中运行命令PATH
以在当前 shell 中执行。
- 编辑 -
显然,我最初的问题引起了一些困惑,所以让我举一个确切的例子。
windows
我有一个名为located at 的脚本~/bin/
,我的 .profile 添加/home/$USER/bin
到我的PATH
环境变量中。该脚本windows
挂载我的 Windows 分区(我双重启动),然后将目录更改为我的 Windows 分区上的主文件。该脚本如下所示:
#!/bin/sh
mount_point="/media/$USER/windows"
if ! grep -q "[[:space:]]$mount_point[[:space:]]" /proc/mounts; then
sudo mount -t ntfs /dev/nvme0n1p3 "$mount_point"
fi
cd "$mount_point"/Users/Justin
windows
所以现在当我在终端中输入命令时它会运行这个脚本,但由于该脚本不是在当前 shell 中运行的,所以cd
不会改变我当前的 shell 目录。
我的问题是,有没有办法让它在我当前的 shell 中运行(这样当我运行命令时windows
它会改变我的目录),而不使用别名来调用前面带有.
答案1
根据 OP 中的新信息,此答案已被更改。
在您的脚本中,您需要推送脚本完成时想要到达的目录:
rick@dell:/$ cat /usr/local/bin/windows
pushd /boot/grub > /dev/null
ls
调用脚本时,必须在其前面加上一个点和空格,.
如下所示:
────────────────────────────────────────────────────────────────
rick@dell:/$ . windows
fonts grub.cfg grubenv locale zapgrub.cfg
gfxblacklist.txt grub.cfg~ i386-pc unicode.pf2
────────────────────────────────────────────────────────────────
rick@dell:/boot/grub$
上面是一个简单的例子,说明如何调用. windows
包含push
命令而不是调用windows
包含cd
命令。
对于您的脚本,您需要更改cd "$mount_point"/Users/Justin
为并使用而不是pushd "$mount_point"/Users/Justin
调用脚本. windows
windows