Как получить ~/.bashrc
псевдонимы для оценки $()
замен во время выполнения , а не во время выполнения ~ / .bashrc (при открытии терминала)?
Я запускаю эту команду достаточно часто, чтобы добавить для нее псевдоним:
svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
Однако, когда я добавляю его ~/.bashrc
в качестве псевдонима, я вижу, что оценки жестко закодированы со значениями, которые они имели во время открытия терминала:
$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'
Если я открываю терминал, ~
я получаю ошибки:
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
$ alias
alias svnbranch='svn diff -r :HEAD | colordiff'
$
Я пробовал эти два варианта псевдонима в ~/.bashrc
, они оба имеют одинаковый эффект (как я и ожидал):
alias svnbranch="svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff"
alias svnbranch="svn diff -r `svn info | grep ^Revision | awk {'print $2'}`:HEAD `svn info | grep ^URL | awk {'print $2'}` | colordiff"
Как получить ~/.bashrc
псевдонимы для оценки $()
замен во время выполнения ?
Кроме того, как можно найти эту ситуацию в Google? Я пытался найти в Google слова "bashrc substitution", "bashrc lazy substitution" и другие ключевые фразы, но я не нашел ничего, что, по моему мнению, должно быть достаточно распространенной проблемой, чтобы найти информацию.
$HOME/bin
вPATH
каталог, если у вас есть такой каталог.alias cdp="cd ~/projects"
. Не могу сделать это в сценарии оболочки.Ответы:
Используйте одинарные кавычки для подавления обработки специальных символов. Вы можете также обратную косую черту в
$
с.Для сложной команды вам, вероятно, лучше использовать функцию в любом случае, которая не требует экранирования и ее легче читать и редактировать:
Вы можете определить функцию везде, где вы можете определить псевдоним.
источник
awk
также имеет шаблонное пространство,awk '/^Revision/{ print ...}'
поэтому в этом случае нет необходимости в grep.