在当前 shell 中的 PATH 位置运行定义的脚本

在当前 shell 中的 PATH 位置运行定义的脚本

我有一个位于我某个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调用脚本. windowswindows

相关内容