如何检查程序是否在bash中运行?

时间:2015-12-30 11:54:23

标签: bash function netcat

我在bash中制作了一个聊天脚本,我想检查netcat是否正在运行。

我已经尝试了pgrep但是它正在运行,但它在终端中输出了一个错误,但它仍然保持正常。

这是该脚本的一部分:

function session()
{

    echo -n "Port (default is 3333): "
    read port

    if [ -n "${port}" ]
    then
        clear
        echo "Only 2 users can talk to each other simultaneously."
        echo "To send a message, simply write and hit enter. Press Ctrl+C to quit."

        nc -l -p ${port}

        if [ pgrep "nc -l -p ${port}" ]
        then
            echo "${l_name} logged in to chat session"
        else
            clear
            new
        fi
    else
        echo "Invalid port!"
        new

    fi
}

2 个答案:

答案 0 :(得分:1)

不要将prep放在[ ]内。这不会运行prep命令,只是将单词pgrep视为test命令的参数。

您还需要使用-f选项使pgrep与整个命令行匹配,而不仅仅是程序名称。

应该是

if pgrep -f "nc -l -p ${port}"
then
    ...
else 
    ...
fi

答案 1 :(得分:0)

尝试使用“-x”参数运行脚本。这显示了每条运行的行。以下是手册页中的说明:

  

-x:扩展每个简单命令后,用于命令,大小写   命令,选择命令或算术命令,显示   扩展PS4的价值,然后是命令及其扩展   参数或相关单词列表。

以下是一个示例脚本:

#!/bin/bash
for i in $( ls ); do
    echo item: $i
done

如果您使用 -x 运行,则可以看到每个命令都以+符号头运行:

$ bash -x list.sh
++ ls
+ for i in '$( ls )'
+ echo item: list.sh
item: list.sh