bash使用子shell在文件参数中循环
在我的下标中迭代脚本时遇到了一些问题。问题似乎是我运行它时,它只会迭代我的$@列表的第一个索引。我认为它会停止并等待更改,然后再继续下一个文件。我的下标的要点是使用我的“单文件脚本”同时检查多个文件。如果我更改了我的文件,它将继续到下一个索引,但如果我允许的话,它不会继续。我希望我能把自己说清楚。 谢谢大家! 脚本1:bash使用子shell在文件参数中循环,bash,shell,loops,subshell,Bash,Shell,Loops,Subshell,在我的下标中迭代脚本时遇到了一些问题。问题似乎是我运行它时,它只会迭代我的$@列表的第一个索引。我认为它会停止并等待更改,然后再继续下一个文件。我的下标的要点是使用我的“单文件脚本”同时检查多个文件。如果我更改了我的文件,它将继续到下一个索引,但如果我允许的话,它不会继续。我希望我能把自己说清楚。 谢谢大家! 脚本1: #!/bin/bash timestamp() { date +"%T" } FILE=$1 timeer=$(stat -f "%Sm" $FILE) myDate=$
#!/bin/bash
timestamp() {
date +"%T"
}
FILE=$1
timeer=$(stat -f "%Sm" $FILE)
myDate=$(date +%b" "%d" "%H:%M:%S" "%Y)
if [ -f $FILE ]; then
timestamp
echo "Filen{$FILE} ble opprettet"
fi
while :
do
Atimeer=$(stat -f "%Sm" $FILE)
if [[ "$Atimeer" != "$timeer" && -f $FILE ]]; then
timestamp
echo "Filen ble endret!!!"
exit 130
fi
if [ ! -f "$FILE" ]; then
echo "Filen {$FILE} ble slettet.."
exit 130
fi
done
脚本2:
#!/bin/bash
if [ $# -lt 1 ]; then
echo "Not enough arguments, Call this script with"
echo "Write: ${0} <file.name>"
exit 1
fi
while :
do
for i in "${@}"
do
echo $i
sh filkontroll.sh "$i"
done
sleep 3
done
#/bin/bash
如果[$#-lt 1];然后
echo“参数不足,请使用调用此脚本”
回显“写入:${0}”
出口1
fi
而:
做
对于“${@}”中的i
做
回声$i
sh filkontroll.sh“$i”
完成
睡眠3
完成
通常,shell脚本会等待每个命令完成,然后再继续执行下一个命令。这就是你剧本中发生的事情,它击中了
sh filkontroll.sh "$i"
然后等待它结束,然后再继续
如果您想同时运行多个in,您应该将命令放在后台,方法是将&
放在行的末尾,如
sh filkontroll.sh "$i" &
或考虑一个工具进行并行化,比如GNU并行(
>P>)。一般来说,shell脚本将等待每个命令在移动到下一个命令之前完成。这就是你剧本中发生的事情,它击中了sh filkontroll.sh "$i"
然后等待它结束,然后再继续
如果您想同时运行多个in,您应该将命令放在后台,方法是将&
放在行的末尾,如
sh filkontroll.sh "$i" &
还是考虑一个工具进行并行化,比如GNU并行程序
btw,它是否永远运行在后台?因为我的mac电脑现在运行得很紧张。我在终端中运行了“top”,我看到四个sh进程在退出脚本后仍在运行?@ruubel它将在后台运行,直到退出,或者自然退出,或者被终止。在你的脚本中,你可以得到很多,因为你启动了它们,等待3秒,然后再次启动它们,并继续这样做,如果其中任何一个需要3秒以上的时间才能完成,你将得到越来越多的结果,直到系统无法再跟上为止哦,我明白了!不,我改成60秒。我可以在脚本中使用kill开关吗?或者当我完成时,我应该如何取消它们?一种可能是Ok答案中的建议,谢谢你的帮助。真的很感激!顺便问一下,它是否永远在后台运行?因为我的mac电脑现在运行得很紧张。我在终端中运行了“top”,我看到四个sh进程在退出脚本后仍在运行?@ruubel它将在后台运行,直到退出,或者自然退出,或者被终止。在你的脚本中,你可以得到很多,因为你启动了它们,等待3秒,然后再次启动它们,并继续这样做,如果其中任何一个需要3秒以上的时间才能完成,你将得到越来越多的结果,直到系统无法再跟上为止哦,我明白了!不,我改成60秒。我可以在脚本中使用kill开关吗?或者当我完成时,我应该如何取消它们?一种可能是Ok答案中的建议,谢谢你的帮助。真的很感激!