bash使用子shell在文件参数中循环

bash使用子shell在文件参数中循环,bash,shell,loops,subshell,Bash,Shell,Loops,Subshell,在我的下标中迭代脚本时遇到了一些问题。问题似乎是我运行它时,它只会迭代我的$@列表的第一个索引。我认为它会停止并等待更改,然后再继续下一个文件。我的下标的要点是使用我的“单文件脚本”同时检查多个文件。如果我更改了我的文件,它将继续到下一个索引,但如果我允许的话,它不会继续。我希望我能把自己说清楚。 谢谢大家! 脚本1: #!/bin/bash timestamp() { date +"%T" } FILE=$1 timeer=$(stat -f "%Sm" $FILE) myDate=$

在我的下标中迭代脚本时遇到了一些问题。问题似乎是我运行它时,它只会迭代我的$@列表的第一个索引。我认为它会停止并等待更改,然后再继续下一个文件。我的下标的要点是使用我的“单文件脚本”同时检查多个文件。如果我更改了我的文件,它将继续到下一个索引,但如果我允许的话,它不会继续。我希望我能把自己说清楚。 谢谢大家!

脚本1:

#!/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答案中的建议,谢谢你的帮助。真的很感激!