Назад | Перейти на главную страницу

как сделать псевдоним с кавычками

Я попытался сделать псевдоним с кавычками следующим образом:

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=`'