Nic*_*ick 7 linux bash shell sh
我的简单脚本是这样的:
#!/bin/sh
DEF=.file_name_with_a_leading_dot.sh
. ${DEF}
Run Code Online (Sandbox Code Playgroud)
注意顶行的/ bin/sh.当我运行这个简单的脚本时,我收到一个错误,找不到该文件.但是,如果我将该顶行更改为#!/ bin/bash,则脚本会在当前目录中找到该文件.
但是,在我的Ubuntu linux笔记本电脑上,我看到/ bin/sh是/ bin/bash的符号链接.那么,为什么我的脚本表现不同?
另外,我可以像这样运行脚本:
/bin/bash ./script.sh
Run Code Online (Sandbox Code Playgroud)
没关系.
那么,我错过了什么?
从Manpage:
.文件名[参数]
source filename [arguments]从当前shell环境中的filename读取并执行命令,并返回从filename执行的最后一个命令的退出状态.如果filename不包含斜杠,则使用PATH中的文件名来查找包含filename的目录.在PATH中搜索的文件不需要是可执行的.当bash不处于posix模式时,如果在PATH中找不到文件,则搜索当前目录.如果关闭shopt内置命令的sourcepath选项,则不搜索PATH.如果提供了任何参数,则在执行文件名时它们将成为位置参数.否则,位置参数不变.返回状态是脚本中退出的最后一个命令的状态(如果没有执行命令,则为0),如果未找到或无法读取文件名,则返回false.
所以,似乎shebang #!/bin/sh将你的bash设置为posix模式.在此模式下,仅PATH评估,而不是当前目录.
| 归档时间: |
|
| 查看次数: |
2803 次 |
| 最近记录: |