Рабочая команда оболочки не имеет псевдонима

Рабочая команда оболочки не имеет псевдонима

Я могу бегать,

 svn status |grep -v .jasper$ |cut -d ' ' -f8 |sed '/.*\..*/!d' |xargs ls -altr --color=auto

просто отлично. Но когда я пытаюсь добавить это как псевдоним (alias svtr="..."), я получаю сообщение об ошибке...

-bash: !d': event not found

Есть идеи?

решение1

Использование обратной косой черты \для экранирования !должно сработать.

alias svtr="svn status |grep -v .jasper$ |cut -d ' ' -f8 |sed '/.*\..*/\!d' |xargs ls -altr --color=auto"
alias svtr
alias svtr='svn status |grep -v .jasper$ |cut -d '\'' '\'' -f8 |sed '\''/.*\..*/\!d'\'' |xargs ls -altr --color=auto'

На самом деле, это просто устраняет ошибку, поскольку внутри ""оболочка пытается интерпретировать !.

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

решение2

В !dвашей sedкоманде это вызывает, потому что !это символ расширения истории Bash. Временно отключите расширение истории, например так:

set -H
alias svtr="..."
set +H

Этого должно хватить.

Связанный контент