#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 ...)
тем, как я использую это все время без проблем