Linux Shell 脚本基础 - 在 Shell 脚本中更改目录 🐧↓
为了方便起见,您可能想要运行一个 shell 脚本,将当前工作目录更改到另一个目录。
例如,如果您经常访问文档目录(~/Documents)并希望快速导航到那里,您可以编写一个 Bash 脚本来执行此操作。
在本主题中,我将向您展示如何使用 cd 命令执行此操作。在此过程中,我将解释 cd 命令的一些复杂操作。
🐧 一个常见问题 让我们从一个导航到 ~/Documents 目录的脚本开始。我将其命名为 https://t.co/C30eEhxKsc:
🐧 分解我们的代码:• cd /home/linuxopsys/Documents - 将当前工作目录更改为 ~/Documents。• pwd - 打印工作目录。• echo $$ - $$ 是 Bash 内部变量,包含正在执行脚本的 shell 的进程 ID (PID)。
🐧 运行我们的脚本正如我们所见,运行我们的脚本会产生预期的 /home/linuxopsys/Documents 输出以及 shell 的进程 ID。
检查脚本运行后我们现在处于什么位置。
您可以清楚地看到我们的目录没有改变。我们没想到这一点,因为当前目录并没有更改为 /home/linuxopsys/Documents。那么,问题可能出在哪里呢?让我们看看我们的 shell 的进程 ID:
我们可以清楚地看到,我们所在的 shell 的进程 ID(PID 4504)和 shell 脚本(PID 4574)完全不同。
这是常见行为。脚本在其独立的 shell(子 shell/childshell)中运行。脚本结束时,这个独立的 shell 会退出,留下我们当前所在的父 shell,它不受影响。
现在的问题是,我们如何解决这个问题?所以,请继续阅读。
🐧 在父 shell 中运行脚本 我们可以使用 source 命令允许我们的脚本在当前 shell(父 shell)中执行命令。
source 命令会在当前 shell 上下文中执行命令,而不是启动一个新的 shell。点运算符是 source 命令的快捷别名 (.)。太棒了!这样我们就可以在当前 shell 中执行 bash 脚本了。我们来试试:
上面的代码片段清楚地表明,脚本的 PID 是执行它的父 shell 的 PID,而我们父 shell 的当前目录现在是 ~/Documents。
太棒了!到目前为止,我们已经展示了如何使用 source 在当前 shell 中运行 shell 脚本。或者,我们也可以使用缩写形式的 . 运算符。
🐧 使用 Bash 函数 为每个目录编写一个 Bash 脚本非常麻烦。我们可以将多个 Bash 命令组合成一个脚本:
现在,如果我们获取该文件,我们就可以在当前终端中使用该脚本的功能。
🐧 使用别名 使用内置的 alias 命令,我们可以进一步改进 Bash 函数。由于别名需要的输入更少,因此比函数更方便使用。让我们将函数转换为它们的别名变体:
与之前的 Bash 函数相比,我们可以看到它是多么简洁。此外,别名的使用方式与函数相同。
就是这样!在本帖中,我们了解了在 Bash 脚本中使用 cd 命令的几种方法。
首先,我们发现运行 Shell 脚本会启动其自身的进程。最后,我们研究了函数和 alias 命令如何帮助我们改进 Bash 脚本。
感谢您读到这里,希望您觉得这个帖子有用,非常感谢您的反馈
如果您喜欢这个帖子,请查看@linuxopsys!因为我们将每天发布更多关于 Linux、系统管理员和 DevOps 的推文。