执行 shell 脚本的不同形式

执行 shell 脚本的不同形式

我已经看到了一些类似的问题,但我提出了一些不同的问题。

我正在读这个http://www.tldp.org/LDP/abs/html/invoking.html当我读到以下内容时,我感到很困惑:

“不推荐使用

sh 脚本名

,因为这实际上禁用了从脚本内的标准输入读取。”

这里有两件事:首先,我尝试执行像这样的脚本

sh myscript.sh < 文件.txt

它从标准输入读取得很好。

第二件事是我知道在脚本顶部添加 shebang

#!/bin/bash

意思完全一样

bash myscript.sh

,所以我不明白作者在那里指出的内容。我只是感到困惑。

有谁明白作者的意思吗?

预先非常感谢。

答案1

您的引用中有一个拼写错误 - 它应该以“不建议使用sh <scriptname”开头,它将标准输入发送到sh而不是发送到scriptname

答案2

脚本顶部#!/bin/bash的 只适用于通过直接键入其名称来执行它:

$ ./scriptname

该方法还需要设置文件执行权限。事实上,当您执行文件时,可以:

  • 它写成(二进制)机器码
  • 解释器在文件中指定,遵循约定#!(称为 shebang):
#!/path/to_the/interpreter

除非我弄错了,否则不能包含此类行的文本文件(由于编写它们的语言的语法),不能以这种方式运行。
对于此类文件,唯一的其他方法是将文件名作为参数传递给解释器。第二种方法的主要优点是它不要求文件对于用户来说是可执行的,而只是可读的。

对于你的第一个问题,l0b0 是正确的,你误读了。

相关内容