这是我的问题:
我有4个脚本来生成不同的文件。我有一个源文件,我作为参数传递,以生成其他输出文件。 这4个脚本被认为是连续运行的。 他们有这样的代码:
while read line; do
if echo "${line: -3}" | grep -q ','
then
if echo "${line:0:4}" | grep -q 'int'
then ...
单独运行它们会给我正确的输出。 从主脚本调用它们会执行错误,并出现一些错误消息,如:
./FirstScript.sh: 35: ./FirstScript.sh: Bad substitution
参考上面的一行:
if echo "${line: -3}" | grep -q ','
我打电话给其他人的主要剧本是:
#!/bin/bash
sh ./FirstScript.sh $1
sh ./SecondScript.sh
sh ./ThirdScript.sh $1
所有脚本都已设置为$ chmod 755 * .sh
答案 0 :(得分:2)
您系统上的sh
是什么?您的#!
行似乎希望使用bash
来解释脚本,但您的主脚本使用sh
,这可能不像bash
那样功能齐全。
答案 1 :(得分:2)
即使你的shebang指向sh
,你也称他们为bash
。如果你想把它们称为bash,只需用bash替换sh,例如
#!/bin/bash
bash ./FirstScript.sh $1
bash ./SecondScript.sh
bash ./ThirdScript.sh $1
Sh
缺少bash
保留的某些功能,这可能会导致错误。见Difference between sh and bash
了解有关此内容的更多信息。
答案 2 :(得分:0)
事实上,正如我在第一句中所说的那样#!/ bin / bash,我可以这样做:
#!/bin/bash
./FirstScript.sh $1
./SecondScript.sh
./ThirdScript.sh $1
据说用/ bin / bash运行每个可执行文件。