我是 shell 脚本的新手。正如我今天发现的,至少有三种方法可以运行 shell 脚本:
要执行它,使用绝对路径或相对路径:
/folder1/folder2/script.sh
./script.sh
缺点是需要先授予它可执行权限:
chmod +x ./script.sh
。要获取它,使用
.
或source
。虽然有时
source
只是 的别名.
,但有时,例如在 Zsh 中,它们的工作方式不同。有关详细信息,请参阅 Stéphane Chazelas 的回答。. ./script.sh
(不仅仅是. script.sh
。有关详细信息,请参阅AdminBee 的回答。)source ./script.sh
- 在 Zsh 中,根据 Stéphane Chazelas 和 AdminBee 提供的链接答案,从纯粹主义的角度来看,使用可能更好
source script.sh
,尽管我不太确定。
- 在 Zsh 中,根据 Stéphane Chazelas 和 AdminBee 提供的链接答案,从纯粹主义的角度来看,使用可能更好
将其作为参数传递给 shell 解释器。
zsh script.sh
将其作为源文件和将其作为参数传递给 shell 解释器之间有什么实际区别?从实用和纯粹的角度来看,哪种方法更好?
“最正确”的方法是授予脚本可执行权限,并确保它在您的脚本中
$PATH
或者您以脚本身份运行它./script
。我倾向于创建一个目录
$HOME/bin
并将我的个人脚本放在那里。例如,如果你使用的是
sh
(或dash
),而不是像 这样的新 shell,bash
则需要将第二行拆分为两部分,并将两部分都添加到文件$HOME/.profile
中然后,您可以创建脚本
mydemo
(通常没有尾随.sh
后缀)并让它们像标准系统命令一样运行:现在您可以像
date
或ls
等一样运行它:请注意,脚本以一行开头
#!
,告诉系统要使用哪个解释器。在本例中是,/bin/sh
但典型的替代方案通常是/bin/bash
。这里最大的优势是:
$PATH
而不会产生任何不良影响。我喜欢,/usr/local/bin
但另一种选择可能是/opt/bin
。请记住不要使用与现有命令相同的名称!请记住,Windows、Mac 和 Linux 系统都是不同的。不要尝试使用 Windows 编辑器创建脚本文件,然后期望它在 Linux 系统上顺利运行。(行尾不同。)这种情况有常见的修复方法,但如果可能的话,最好从一开始就避免这种情况。
问题的另一部分,关于
.
(或source
)和直接执行脚本之间的区别,在 bash 中获取(“。”或“source”)和执行文件之间的区别是什么中进行了解释