ps -x|grep работает в командной строке, но не в скрипте оболочки, почему?

#bash #grep

Вопрос:

Я пытаюсь выяснить, запущен ли конкретный идентификатор процесса. Если я наберу в командной строке:

ps -x|cut -c1-5|grep 7032

В качестве ответа я получаю 7032. Но если я вставлю в сценарий оболочки:

read pid_found lt; "ps -x|cut -c1-5|grep $old_pid"

Я получаю сообщение об ошибке:

./test.sh: line 11: ps -x|cut -c1-5|grep 7032: No such file or directory

Обратите внимание, что расширение $old_pid не является проблемой-в сообщении об ошибке правильно указано grep 7032 . На каждый подобный вопрос в StackOverflow есть ответы, предлагающие использовать

variable_name=$(command)

но это тоже не работает для меня, ни с какой командой. По крайней мере

read variable_name lt; "command"

работает в другом месте сценария

Редактировать: Мне удалось заставить его работать, удалив все каналы в кавычках и поместив все промежуточные значения в файлы. Это некрасиво, но это работает:

 #!/bin/bash cd /home/automan/vms_feed  read -d 


Комментарии:

1. попробуйте: read pid_found lt; lt;(ps -x|cut -c1-5|grep $old_pid) или pid_found=$(ps -x|cut -c1-5|grep $old_pid)

2. Теперь я получаю syntax error near unexpected token `lt;'

3. предполагая, что нет проблем с вырезанием и вставкой в ваш env, не должно возникнуть синтаксической ошибки; вы работаете под bash ? что bash --version возвращается?

4. bash --возвращает версию GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

5. read pid_found lt; "ps -x ..." пытается прочитать содержимое файла с именем ps -x ... , отсюда и сообщение об ошибке, которое ps -x ... является недопустимым файлом ( No such file or directory ); все еще не уверен, в чем проблема ( syntax error near unexpected token lt; ??) с read pid_found lt; lt;(ps -x ...) тем, как я использую это все время без проблем

x04' old_pid lt; "OldPID" ps -x|cut -c1-5 gt; "Processes" grep $old_pid "Processes"|wc -c gt; "PID_found" read -d

Комментарии:

1. попробуйте: read pid_found lt; lt;(ps -x|cut -c1-5|grep $old_pid) или pid_found=$(ps -x|cut -c1-5|grep $old_pid)

2. Теперь я получаю syntax error near unexpected token `lt;'

3. предполагая, что нет проблем с вырезанием и вставкой в ваш env, не должно возникнуть синтаксической ошибки; вы работаете под bash ? что bash --version возвращается?

4. bash --возвращает версию GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

5. read pid_found lt; "ps -x ..." пытается прочитать содержимое файла с именем ps -x ... , отсюда и сообщение об ошибке, которое ps -x ... является недопустимым файлом ( No such file or directory ); все еще не уверен, в чем проблема ( syntax error near unexpected token lt; ??) с read pid_found lt; lt;(ps -x ...) тем, как я использую это все время без проблем

x04' pid_found lt; "PID_found" echo "Running: test, old_pid =" $old_pid if [ $pid_found -gt 0 ] then echo "Running: test, old pid found" $pid_found else echo "Running: test, old pid not found" fi echo $ gt; OldPID echo "Finished: test"

Комментарии:

1. попробуйте: read pid_found lt; lt;(ps -x|cut -c1-5|grep $old_pid) или pid_found=$(ps -x|cut -c1-5|grep $old_pid)

2. Теперь я получаю syntax error near unexpected token `lt;'

3. предполагая, что нет проблем с вырезанием и вставкой в ваш env, не должно возникнуть синтаксической ошибки; вы работаете под bash ? что bash --version возвращается?

4. bash —возвращает версию GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

5. read pid_found lt; "ps -x ..." пытается прочитать содержимое файла с именем ps -x ... , отсюда и сообщение об ошибке, которое ps -x ... является недопустимым файлом ( No such file or directory ); все еще не уверен, в чем проблема ( syntax error near unexpected token lt; ??) с read pid_found lt; lt;(ps -x ...) тем, как я использую это все время без проблем