Bash 在一个shell脚本中运行多个shell脚本时出现问题
我试图创建一个shell脚本,在CentOS 7下运行多个脚本。每个脚本都以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
#开头/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
开头?其他脚本都有吗?“停止”是什么意思?它是永远挂着,还是永远挂着?