Почему некоторые команды ведут себя по-разному при запуске с использованием псевдонима bash? - PullRequest
2 голосов
/ 30 июня 2011

При разработке с SVN иногда я хочу просто откатить все свои изменения и начать все сначала, поэтому я собрал команду, чтобы отменить все файлы в моей проверке:

alias "svn-reset"="svn status | perl -nale 'print $F[1] if /^M/' | xargs svn revert"

Когда я запускаю svn status | perl -nale 'print $F[1] if /^M/' | xargs svn revert в командной строке, код работает должным образом: все мои измененные файлы возвращаются, что подтверждается другой командой svn status. Однако, когда я запускаю svn-reset, я получаю вывод, подобный следующему:

$ svn-reset
Skipped 'ARRAY(0x1c2f52a0)'
Skipped 'ARRAY(0x1c2f5450)'
Skipped 'ARRAY(0x1c2f5410)'

В этом примере я проверил, что у меня в кассе три измененных файла, поэтому похоже, что проблема в том, что perl печатает неверную информацию. Тем не менее, я почти не знаю perl, и я озадачен тем, почему perl будет вести себя по-разному при использовании псевдонима bash по сравнению с ручным выполнением того же кода perl. Есть мысли?

Этот вопрос о том, почему perl ведет себя по-разному при запуске с использованием псевдонима bash. Если у кого-нибудь есть предложения по более эффективному способу автоматического возврата всех измененных файлов в SVN, мне это тоже будет интересно, но это не отвечает на мой вопрос.

Ответы [ 3 ]

3 голосов
/ 30 июня 2011

Вот так выглядит ваш псевдоним для оболочки

вывод команды alias:

alias svn-reset='svn status | perl -nale '\''print [1] if /^M/'\'' | xargs svn revert'

после экранирования $ выглядит так:

alias svn-reset='svn status | perl -nale '\''print $F[1] if /^M/'\'' | xargs svn revert'
3 голосов
/ 30 июня 2011

Попробуйте избежать доллара, чтобы оболочка не заменяла $F ничем при создании псевдонима:

alias svn-reset="svn status | perl -nale 'print \$F[1] if /^M/' | xargs svn revert"
1 голос
/ 30 июня 2011

Вы использовали двойные кавычки вокруг псевдонима, поэтому оболочка расширяет $ F. Измените его на (не проверено):

alias "svn_reset"="svn status | perl -nale 'print \$F[1] if /^M/' | xargs svn revert"
...