【发布时间】:2017-02-24 03:49:53
【问题描述】:
我需要创建一个 bash 脚本来等待一个文件被创建。该脚本将在 while 循环中使用 sleep 命令,每 10 秒定期检查一次文件。等待时打印出一条消息。创建文件后显示文件的内容。以下是我试图实现的,它显然不起作用。在这一点上,我不完全确定如何继续。
#!/bin/bash
let file=$1
while '( -f ! /tmp/$1)'
do
sleep 10
echo "still waiting"
done
echo "Content of the file $1:"
【问题讨论】:
-
'(...)'是一个字符串,归结为while true。试试while [ !-f /tmp/$1 ]或类似的。 -
@MarcB,嗯?根本不是
while true;它是while false,因为该字符串不是有效的命令。如果它在测试中,那么它可能是真的。 -
顺便说一句,在未来,考虑使用
bash -x yourscript来确定执行过程中发生了什么——在这种情况下,这表明我们直接从'( -f ! /tmp/$1)'到echo "Content of the file $1:",从而排除了sleep的问题(因为它根本没有运行)。 -
@MarcB, ...顺便说一句,它应该是
while [ ! -f /tmp/"$1" ]--!和-之间的空格是强制性的,同样的扩展名周围的引号(以避免宽字符串拆分和全局扩展的一系列不良行为)。或while ! test -f "/tmp/$1",或任何其他写法。