我目前正在编写一个正在编写脚本然后执行它们的脚本。
运行父脚本的用户是 root 用户。
这是代码:
1 for i in $(seq 1 $num)
2 do
3
4
5 scriptL1="#!/bin/bash"
6 scriptL2="i=$i"
7 echo $scriptL1 > /tmp/pulse$i.sh
8 echo $scriptL2 >> /tmp/pulse$i.sh
9
10 #this loop writes line-by-line from a file to the child script file
11 for j in $(seq 1 $(cat $HOME/mainscript.txt | wc -l))
12 do
13 line=$(head -n $j $HOME/mainscript.txt | tail -n 1)
14 echo $line >> /tmp/pulse$i.sh
15 done
16
17 chmod +x /tmp/pulse$i.sh
18
19 setsid /tmp/pulse$i.sh &
20 done
它本质上是为目录中的 $num 个项目做的,它在 /tmp 中生成 $num 个脚本。从此脚本在 /tmp 中创建的每个脚本都按预期工作。事实上,这个整体脚本有效。但是,当我从终端运行此父脚本时,它无法启动任何 /tmp/pulseVM$i.sh 可执行文件。
简而言之,这个脚本未能按预期执行第 19 行,我不知道为什么。
我期待这个父脚本会将这些子脚本分叉到后台。这样,这个父脚本可以在子脚本继续的同时结束。目前,没有执行子脚本。
这是一个示例 mainscript.txt:
WORK="#Write a directory path here"
#This directory is owned by root and must be owned by the root. It is also shared with a virtual machine that is using root.
rm $WORK/VMInputShared/VM$i/pong/pulse
touch $WORK/VMInputShared/VM$i/ready
sleep 10
fails=0
while true
do
if [[ $(ls $WORK/VMInputShared/VM$i/pong) == "pulse" ]]
then
touch $WORK/VMReadyKeys/VM$i
fails=0
mv $WORK/VMInputShared/VM$i/pong/pulse $WORK/VMInputShared/VM$i/ping/pulse
else
((fails++))
if [ $fails -le 9 ]
then
echo "Failure $fails/10..."
else
echo "Failure $fails/10..."
rm $WORK/VMReadyKeys/VM$i
fi
fi
sleep 3.2
done
请务必注意,.../VM$i 是一个共享文件夹,其中包含在该系统上运行的虚拟机。虚拟机在 root 下运行,由于虚拟机的用途,它始终需要 root 权限。