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
)。