我已经看到了一些类似的问题,但我提出了一些不同的问题。
我正在读这个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 是正确的,你误读了。