问题无法执行 bash 脚本中的所有 bash 脚本

Issue unable to execute all bash script within bash script

我有以下 bash 脚本,其中 运行 有两个并行处理(内部有两个 bash 脚本),我需要两个 bash 脚本两个 运行 并行完成后我需要总时间执行。但问题是第一个 bash 脚本 ./cloud.sh 没有 运行 但是当我 运行 它单独 运行 成功时,我是 运行ning 主测试 bash 具有 sudo 权限的脚本。

测试

#!/bin/bash
start=$(date +%s%3N)
./cloud.sh &
./client.sh &
end=$(date +%s%3N)
echo "Time: $((duration=end-start))ms."

Client.sh

#!/bin/bash
sudo docker build -t testing .'

Cloud.sh

#!/bin/bash
start=$(date +%s%3N)
ssh kmaster@192.168.101.238 'docker build -t testing .'
end=$(date +%s%3N)
echo "cloud: $((duration=end-start)) ms"

后台进程将无法获得您的键盘输入。一旦它尝试这样做,它就会收到一个 SIGTTIN 信号来停止它(直到它被带回前台)。

我怀疑你的一个或两个脚本要求你输入一些东西,通常是密码。

解决方案 1:配置 sudo 和 ssh 以使其无密码。使用 ssh 这很容易(ssh 密钥),使用 sudo 这是一个安全风险。如果 docker build 需要你输入一些东西,那你就完蛋了。

解决方案 2:仅使 ssh 脚本 (Cloud.sh) 无密码,并将 sudo 脚本 (Client.sh) 保留在前台。同样,如果遥控器 docker build 需要您输入某些内容,这将不起作用。

如何等待您的后台进程?只需使用 wait 内置 (help wait).

解决方案 2 的示例:

#!/bin/bash
start=$(date +%s%3N)
./cloud.sh &
./client.sh
wait
end=$(date +%s%3N)
echo "Time: $((duration=end-start))ms."