2013-10-06 3 views
0

мне нужно найти процесс согласования строки, и убить его, нужно сделать это в одной строке в другом файле сценария: вот что я пробовал:команда Баш цитируемый одинарные кавычки

 
'kill $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }')' 
 
"kill $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }')" 

первый из них не работал из-за вложенной одинарной кавычки, второй не работал, потому что 2 родительский скрипт принимается как аргумент 2 для родительского скрипта. как это сделать?

ответ

3

Самый простой способ для выполнения этой задачи является:

pkill xxx 

(., Которые вы найдете в Debian/Ubuntu мире в пакете procps, если вы не установили) Вы, возможно, потребуется используйте pkill -f xxx, в зависимости от того, является ли xxx частью имени процесса или аргумента, что часто бывает при выполнении сценария.

Однако, чтобы ответить на более общий вопрос о скорлупе цитировании, если вам нужно передать строку

kill $(ps aux | grep xxx | grep -v grep | awk '{print $2}') 

в качестве аргумента, вам нужно использовать обратный слеш:

bash -c "kill \$(ps aux | grep xxx | grep -v grep | awk '{print \$2}')" 

Или , вы можете вставить несколько строк:

bash -c 'kill $(ps aux | grep xxx | grep -v grep | awk '"'"'{print $2}'"'"')' 

Лично я нахожу первый еще один r eadable, но YMMV.

Вы можете только обратный слэш избежать несколько символов внутри двойных кавычках строки: $, ", \, новой строки и кавычкой; и внутри одноколейной обратной косой черты просто обратная косая черта. Тем не менее, этого достаточно, чтобы вы могли ввести что угодно.

Смежные вопросы