Ard*_*deh 4 shell bash python executable
这是我当前的 bash,它只是一个循环
while true ; do
python3 /Users/Name/Desktop/pythoncode.py
done
Run Code Online (Sandbox Code Playgroud)
pythoncode.py
如果它在 2 分钟内没有向终端输出任何内容,我想终止
与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
}
Run Code Online (Sandbox Code Playgroud)
使用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
}
Run Code Online (Sandbox Code Playgroud)
那些检查该脚本是否向标准输出写入任何内容,而不是专门写入终端。
如果您还想在命令写入内容时停止,但在两分钟内停止并且没有输出任何内容,或者换句话说,在 2 分钟不活动后终止命令,那么您可以使用socat
:
socat -T120 'exec:python3 /Users/Name/Desktop/pythoncode.py' -
Run Code Online (Sandbox Code Playgroud)
或与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
}
Run Code Online (Sandbox Code Playgroud)