if [ "$EUID" -ne 0 ]
then
echo ''
echo 'Please run the script as root'
echo ''
exit
fi
for run in {1..11}
do
echo ''
echo $run'th running...'
echo 'Starting tst script...'
echo ''
timeout 30 sudo ./tst.sh <-----XXXXXX
# Call next script
echo ''
echo 'Sending data...'
for run in {1..10}
do # run 10 times
sudo /home/ubuntu/Desktop/data/data <----- data.sh
done
echo ''
echo 'restarting script..."
done
问题是我想要启动tst.sh而且30秒后我想要停止它。虽然'timeout 30'是一个很好的解决方案,但下一行不会被执行。我如何解决这个问题,以便我可以在执行tst.sh后停止并执行以下行?
感谢。
答案 0 :(得分:0)
令我困惑的是timeout 30
是一个很好的解决方案。如果我将脚本删除到最低限度,
echo hop
timeout 2 sudo sleep 20
echo plop
并使用time bash test.sh
运行它:
hop
plop
real 0m20.039s
user 0m0.012s
sys 0m0.025s
换句话说,timeout
执行后的行(与您遇到的相反),但{2}后sleep 20
没有被杀死。
无论如何,另一个解决方案可能是:
sudo ./tst.sh &
pid=$!
sleep 30
kill $pid
答案 1 :(得分:0)
我发现了使用sudo的 non-interactive 标志对我来说更有效的解决方案。
-n, --non-interactive
Avoid prompting the user for input of any kind. If a password is required
for the command to run, sudo will display an error message and exit.
基本上,它不会询问您密码,但是如果您还没有sudo,则会失败。
sudo -n -v 2> /dev/null
if [[ "${?}" != "0" ]]; then
echo ''
echo 'Please run the script as root'
echo ''
fi
如果不将stderr
重定向到/dev/null
,则会显示sudo: a password is required
消息。
-v
用于验证和更新您当前的sudo“会话”。我用它是因为它什么都不输出。