Bash 在一个shell脚本中运行多个shell脚本时出现问题

Bash 在一个shell脚本中运行多个shell脚本时出现问题,bash,shell,sh,centos7,Bash,Shell,Sh,Centos7,我试图创建一个shell脚本,在CentOS 7下运行多个脚本。每个脚本都以#开头/bin/bash。每个脚本都经过测试,可以作为独立的shell脚本运行,没有问题 脚本内容\u all.sh #!/bin/bash sudo yum install centos-release-scl sudo yum install devtoolset-9-gcc* scl enable devtoolset-9 bash which gcc gcc --version #!/bin/bash sudo

我试图创建一个shell脚本,在CentOS 7下运行多个脚本。每个脚本都以
#开头/bin/bash
。每个脚本都经过测试,可以作为独立的shell脚本运行,没有问题

脚本内容\u all.sh

#!/bin/bash
sudo yum install centos-release-scl
sudo yum install devtoolset-9-gcc*
scl enable devtoolset-9 bash
which gcc
gcc --version
#!/bin/bash
sudo yum install centos-release-scl-rh
sudo yum-config-manager --enable centos-release-scl-rh
sudo yum install devtoolset-9
scl enable devtoolset-9 bash
脚本_1.sh

#!/bin/bash
sudo yum install centos-release-scl
sudo yum install devtoolset-9-gcc*
scl enable devtoolset-9 bash
which gcc
gcc --version
#!/bin/bash
sudo yum install centos-release-scl-rh
sudo yum-config-manager --enable centos-release-scl-rh
sudo yum install devtoolset-9
scl enable devtoolset-9 bash
脚本_2.sh

#!/bin/bash
sudo yum install centos-release-scl
sudo yum install devtoolset-9-gcc*
scl enable devtoolset-9 bash
which gcc
gcc --version
#!/bin/bash
sudo yum install centos-release-scl-rh
sudo yum-config-manager --enable centos-release-scl-rh
sudo yum install devtoolset-9
scl enable devtoolset-9 bash
似乎
/scripts\u all.sh
将成功执行
set-x
sudo-yum
sh script\u 1.sh
,但会在
sh script\u 2.sh
处停止。值得注意的是,我可以运行
sh script_2.sh
,而无需独立于
scripts_all.sh
。我不知道为什么其余的脚本不能运行

/scripts\u all.sh
打印
sh script\u 1.sh
的行及其执行,但它从不打印
sh script\u 2.sh
的行

有人能帮忙吗?

把评论复制成答案的样子

sh script_1.sh
etc行更改为
bash-x script_1.sh
(或者
sh-x script_1.sh
,因为脚本似乎没有使用任何特定于bash的语法)并监视发生了什么。您是否在
script_1.sh
中看到了来自
gcc--version
的版本信息

gcc--version
仅在我注释掉
scl enable devtoolset-9 bash时打印。我运行了
scl enable devtoolset-9 bash,它没有向屏幕输出任何内容

这表明
scl
命令未完成。可能它正在等待来自终端的输入。当包含
scl
命令时,您是否看到
哪个gcc
的输出?如果没有,则几乎可以确定
scl
正在尝试从终端读取数据。我不知道它读的是什么——这不是我熟悉的命令

它不等待任何输入。执行后,当我单独运行它时,它会再次显示提示

如果您没有看到
which gcc
gcc--version
输出,那么我想可能是
scl
命令没有完成。命令选项末尾的
bash
做了什么?它是否运行
bash
进程?如果是,它的输入来自哪里?使用
-x
选项(
sh-x script_1.sh
)运行将显示正在执行的内容,以及
scl
是否正在完成

scl enable foo bar bash
实际运行启用了
foo
bar
软件集合的bash实例。看

嗯,;那
bash
实例在做什么?它不是在执行任何操作之前等待输入吗?这有点令人惊讶,没有提示,但并不完全令人惊讶。当scl挂起时,您是否尝试过键入
exit

我刚刚尝试了
scl-enable-devtoolset-9 bash&echo“Enabling-devtoolset-9”
,它工作了,并最终打印出
gcc--version

嗯,
&
在后台运行
scl
命令,让
echo
运行,然后运行
哪个gcc
gcc--version
。用分号替换
&
。或者将
&
替换为
-c'echo Hi'
和分号,看看会发生什么

太好了!添加
-c echo“Hi”
使它工作了

因此,
scl enable devtoolset-9 bash
末尾指定的
bash
命令正在等待您的输入,这就是为什么它没有终止(并且您看不到哪个gcc
正在运行)等等。在
script_2.sh
的末尾,您遇到了相同的问题-其他脚本呢?但你现在知道发生了什么,可以决定怎么做了。例如,使用
-c exit
可以简单地终止shell(而不是回显
Hi


我需要更多地研究
scl
命令,但是您真的需要在这些脚本中使用它吗?

如果它们是bash脚本,您应该使用
bash脚本。或者如果它们以
#开头
只需使用
/script\u N.sh
是否
设置-x
显示
script\u 1.sh
行?如果不显示,则表示
sudo yum…
尚未完成。为什么打印这些行?该脚本是否也以
set-x
开头?其他脚本都有吗?“停止”是什么意思?它是永远挂着,还是永远挂着?