Bash 运行两个shell命令
下面要执行两个脚本的正确格式是什么?以下仅为我执行第一个:Bash 运行两个shell命令,bash,shell,unix,Bash,Shell,Unix,下面要执行两个脚本的正确格式是什么?以下仅为我执行第一个: if ps aux | grep -E "[a]ffiliate_download.py|[g]oogle_download.py" > /dev/null then echo "Script is already running. Skipping" else exec "$DIR/affiliate_download.py" exec "$DIR/google_download.py" fi exec
if ps aux | grep -E "[a]ffiliate_download.py|[g]oogle_download.py" > /dev/null
then
echo "Script is already running. Skipping"
else
exec "$DIR/affiliate_download.py"
exec "$DIR/google_download.py"
fi
exec
命令将当前shell进程替换为它运行的程序。由于shell不再运行,因此在此之后无法运行命令
只需正常执行命令:
else
"$DIR/affiliate_download.py"
"$DIR/google_download.py"
fi
exec
命令将当前shell进程替换为它运行的程序。由于shell不再运行,因此在此之后无法运行命令
只需正常执行命令:
else
"$DIR/affiliate_download.py"
"$DIR/google_download.py"
fi
你的意思是它在到达
else
时只运行第一个命令吗?@kaybee99,exec
导致shell用要运行的进程替换自己,因此这是正常/预期的行为。你的意思是它在到达else
时只运行第一个命令吗?@kaybee99,exec
导致shell用要运行的进程替换自身,因此这是正常/预期的行为。执行exec“command”
和“command”
之间有什么区别?@David542,不同之处在于,exec
用新命令替换shell的进程表项——因此shell不再运行,发送到其PID的信号由被替换的程序接收。@David542正常运行程序时,它在新进程中运行,shell等待它完成(如果使用&
将其放在后台,则不等待)。当使用exec
运行它时,它在shell的进程中运行,完全替换shell。@David542:不使用exec
When命令
是一个外部程序,shell首先执行一个fork
。当它可能会弄乱重定向之类的事情时,这会创建一个新的shell进程。然后执行一个exec
,在同一进程中用另一个程序替换当前程序。默认情况下,某些事情在exec
中仍然存在,例如环境块、文件描述符表和uid。另请参阅env
程序(manenv
)。执行exec“command”
和“command”之间有什么区别
?@David542,不同之处在于exec
用新命令替换shell的进程表项——因此shell不再运行,发送到其PID的信号由其替换的程序接收。@David542正常运行程序时,它在新进程中运行,shell等待它完成(如果使用&
将其放在后台,则不等待)。当使用exec
运行它时,它在shell的进程中运行,完全替换shell。@David542:不使用exec
When命令
是一个外部程序,shell首先执行一个fork
。当它可能会弄乱重定向之类的事情时,这会创建一个新的shell进程。然后执行一个exec
,在同一进程中用另一个程序替换当前程序。默认情况下,某些事情在exec
中仍然存在,例如环境块、文件描述符表和uid。另请参阅env
程序(manenv
)。