在检查所述命令的结果的同时将命令的结果分配给变量

时间:2017-07-16 19:42:57

标签: bash shell

我想结合以下循环:

while ps -p PID_OF_JAVA_PROCESS; do
    sleep 1;
done;

进入以下循环:

if pgrep -f java.*name_of_file > /dev/null; then
    echo "Shutting down java process!"
    pkill -f java.*name_of_file
else
    echo "Not currently running!"
fi

通过将pgrep的结果分配给变量(此java进程的PID) - 就像下面的内容一样:

if pgrep -f java.*name_of_file > /dev/null; then
    echo "Our java process is currently running!"
    pkill -f java.*name_of_file
    echo "Please wait while our process shuts down!"
    while ps -p $(pgrep -f java.*name_of_file); do
        sleep 1;
    done;
else
    echo "Not currently running!"
fi

我想结合上述内容,同时保持每个命令的结果安静(当然,回声除外)。

1 个答案:

答案 0 :(得分:1)

if pids=${pgrep -f java.*name_of_file 2>/dev/null }; then
    echo "Our java process is currently running!"
    kill -f $pids  > /dev/null 2>&1
    echo "Please wait while our process shuts down!"
    while ps -p $(pgrep -f java.*name_of_file 2> /dev/null); do
        sleep 1;
    done;
else
    echo "Not currently running!"
fi

> /dev/null将stdout重定向到/ dev / null

2> /dev/null将stderr重定向到/ dev / null

> /dev/null 2>&1将stderr重定向到stdout到/ dev / null,从而使命令无论如何沉默

如果我假设上面的两个脚本运行正确,那么这个稍微修改过的版本应该是您想要的:)