次のファイルがあります。
ls
mate30pro5g.py Mathematica.py opencv.py
このコマンドがバックグラウンド操作を開始できることを知っています。
python3 mate30pro5g.py &
それでは、次のコマンドで複数のタスクを開始したいと思います。
ls *.py | xargs -n1 -i python3 {} &
ところで、バックグラウンド作業が1つだけ始まったことがわかりました。何を逃したのですか?
添付:私のすべての.py
ファイルには無限ループがあります。
ベストアンサー1
問題は&
xargs に送信されないコールシェルによって説明されます。
したがって、引数としてpython3を実行するにはbashを呼び出す必要があります。
解決策:
ls *.py | xargs -n1 -i bash -c 'python3 {} &'
一例:
root@debian:/# ls -1d /etc/rc* | xargs -n1 -i bash -c 'sleep 90 & echo {} '
/etc/rc0.d
/etc/rc1.d
/etc/rc2.d
/etc/rc3.d
/etc/rc4.d
/etc/rc5.d
/etc/rc6.d
/etc/rcS.d
root@debian:/# ps faux | grep sleep
root 494 0.0 0.0 4184 704 pts/0 S 20:54 0:00 sleep 90
root 496 0.0 0.0 4184 672 pts/0 S 20:54 0:00 sleep 90
root 498 0.0 0.0 4184 652 pts/0 S 20:54 0:00 sleep 90
root 500 0.0 0.0 4184 648 pts/0 S 20:54 0:00 sleep 90
root 502 0.0 0.0 4184 672 pts/0 S 20:54 0:00 sleep 90
root 504 0.0 0.0 4184 656 pts/0 S 20:54 0:00 sleep 90
root 506 0.0 0.0 4184 648 pts/0 S 20:54 0:00 sleep 90
root 508 0.0 0.0 4184 684 pts/0 S 20:54 0:00 sleep 90
root 510 0.0 0.0 11108 948 pts/0 S+ 20:54 0:00 grep sleep
タスクを通じてすべてのプロセスを管理する別のソリューションです。すべてのコマンドを含む大きな文字列を生成して呼び出す必要がありますeval
。
CMD=$( ls *py | xargs -n1 -i echo ' python3 {} & ' )
eval $CMD
または
eval $( ls *py | xargs -n1 -i echo ' python3 {} & ' )