Я попытался сделать псевдоним с кавычками следующим образом:
alias myalias='ps -ef | grep tomcat | kill -9 `awk {'print $2'}`'
но, как вы видите, у меня уже есть '
в awk
поэтому я попытался заменить
awk {'print $2'}
с участием
awk {"print $2"}
но потом со мной происходят странные вещи, когда я запускаю этот псевдоним, т.е. окно консоли закрывается ... как я могу заставить этот псевдоним работать
Использование функции вместо псевдонима позволяет избежать большинства этих проблем с цитированием:
myfn() { ps -ef | awk '/tomcat/ {print $2}' | xargs kill -9; }
Если вы используете awk, grep не нужен.
Или придерживайтесь функции и избегайте почти всей выполняемой работы:
alias myalias='pkill -9 -f tomcat'
Вот что нужно для цитирования псевдонимов:
alias x='echo dollar sign: \$ "single quote: '\'' backslash: \\ double quote: \"."'
$ alias x
alias x='echo dollar sign: \$ "single quote: '\'' backslash: \\ double quote: \"."'
$ x
dollar sign: $ single quote: ' backslash: \ double quote: ".
Очень мало того, что невозможно сделать, практически все, что можно напечатать на трепать командную строку можно поместить в псевдоним.
Вы можете «склеить» одинарные кавычки с двойными кавычками:
alias myalias='ps -ef | grep tomcat | kill -9 `awk {'"'"'print $2'"'"'}`'
Вот интересная ссылка: https://stackoverflow.com/questions/1250079/escaping-single-quotes-within-single-quoted-strings
Однако есть более простые решения для уничтожения процесса вместо использования нескольких каналов или дополнительных одинарных кавычек (см. Другие ответы). Здесь я просто пытался ответить на ваш первоначальный вопрос, сохраняя вашу логику.
Вместо запуска этих нескольких каналов используйте аргументы для ps
чтобы получить только pid для начала:
alias killtc='kill `ps -C tomcat -o pid=`'