2015-12-30 3 views
-1

Я сделал чат-скрипт в bash, и я хочу проверить, работает ли netcat.Как проверить, запущена ли программа в bash?

Я пробовал 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 
} 
+0

'служба Netcat status'? – fedorqui

+1

Какая ошибка распечатывается? что такое код возврата из pgrep, когда вы его запускаете? –

+0

Ничего, я просто пропускал некоторые символы в выражении if. – NanoCoder

ответ

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 
+0

Как скрипт использовал бы это, чтобы проверить, запущен ли 'netcat'? – Barmar

+0

Когда вы запускаете скрипт, вы можете видеть, какие команды запускаются и выводятся. Ваша команда 'netcat' будет зарегистрирована, если она запущена. – caglar

+0

Да, но он хочет, чтобы скрипт сам мог сказать, работает ли netcat, поэтому он может что-то сделать с 'if'. – Barmar

1

Не класть prep внутри [ ]. Это не запускает команду prep, она просто рассматривает слово pgrep как аргумент команды test.

Вам также необходимо использовать опцию -f, чтобы сделать pgrep совпадением со всей командной строкой, а не только с именем программы.

Это должно быть

if pgrep -f "nc -l -p ${port}" 
then 
    ... 
else 
    ... 
fi 
Смежные вопросы