これは私の現在のbashです。ただループです。
while true ; do
python3 /Users/Name/Desktop/pythoncode.py
done
pythoncode.py
2分以内に端末に何も出力されない場合は終了したいです。
ベストアンサー1
そしてzsh
:
zmodload zsh/system
(
echo $sysparam[pid]
exec python3 /Users/Name/Desktop/pythoncode.py
) | {
read pid
if sysread -o 1 -s 1 -t120; then
cat
else
kill -s PIPE $pid 2> /dev/null
fi
}
を使用すると、bash
次のことができます。
(
echo "$BASHPID"
exec python3 /Users/Name/Desktop/pythoncode.py
) | {
read pid
if LC_ALL=C IFS= read -rd '' -n1 -t120 byte; then
if [ -n "$byte" ]; then
printf %s "$byte"
else
printf '\0'
fi
cat
else
kill -s PIPE "$pid" 2> /dev/null
fi
}
これにより、スクリプトが端末ではなく標準出力に書き込むかどうかを確認します。
コマンドが何かを書いたときに停止し、2分間何も出力しない場合、つまり2分間アクティビティがないとコマンドを終了する場合は、次のことができますsocat
。
socat -T120 'exec:python3 /Users/Name/Desktop/pythoncode.py' -
または以下を使用してzsh
:
zmodload zsh/system
(
echo $sysparam[pid]
exec python3 /Users/Name/Desktop/pythoncode.py
) | {
read pid
while
sysread -o 1 -t 120; ret=$?
(( ret == 0 ))
do continue; done
# 5 means EOF
(( ret == 5 )) || kill $pid
}