Вы можете изменить бит цитирования, чтобы не разрешать использование обратных кавычек до тех пор, пока не будет использован псевдоним.
alias ncstop 'nc stop `nc list | awk '\''/Running/{print $1}'\''`'
Это работает, потому что при использовании символа '
для цитирования используются специальные символы, такие как |
, $
и обратная кавычка
не интерпретируются оболочкой. Это позволяет этим специальным символам попасть в определение псевдонима. Но в процессе определения псевдонима оболочка удаляет этот внешний слой '
. Что на самом деле заканчивается в определении псевдонима, должно быть:
nc stop `nc list | awk '/Running/{print $1}'`
Конструкция '\' '
часто требует небольшого пояснения. Но вкратце это три апострофа. Первая завершает предыдущую строку в кавычках, следующая (которая экранирована, чтобы оболочка не интерпретировала ее) проходит, а третья начинает другую строку в кавычках. Таким образом, конструкция '\' '
позволяет использовать апостроф (например: '
или одинарные кавычки
) внутри строки, заключенной в одинарные кавычки.
Получение всех кавычек и экранирований прямо в строке, которая должна пройти через несколько уровней интерпретации, очень быстро становится беспорядочным и сложным. Был комментарий к вопросу, который рекомендовал (для bash
) вместо этого изучить реализацию псевдонимов как функций.Я почти уверен, что то же самое можно посоветовать для tcsh
.