2013-10-15 4 views
0

В моей предыдущей question я создал команду, которая возвращается Svn файлов по шаблону:Run команда Баш как функция

svn st | grep SomeFolderA | awk {'print $2'} | xargs svn revert 

Теперь я хочу, чтобы сделать это команда, которая принимает аргумент (файл шаблона) и запускает указанную выше команду используя аргумент вместо SomeFolderA. Я попробовал, добавив это мой .bash_profile файл:

function revert() { 
    "svn st | grep '$1' | awk '{print \$2}' | xargs svn revert" ; 
} 

Когда я бегу revert SomeFolderA я получаю этот выход:

-bash: svn st | grep 'SomeFolderA/' | awk '{print $2}' | xargs svn revert: No such file or directory 

Я также попытался использовать полный путь для svn, но он по-прежнему не работает. Что мне не хватает?

+0

'" СВН ст | grep '$ 1' | awk '{print \ $ 2}' | xargs svn revert "' пытается выполнить команду с этим именем. Удалите кавычки. Посмотрите http://www.linuxjournal.com/content/return-values-bash-функции о том, как функции bash возвращают значения. –

+0

Возможный дубликат [Как вернуть строковое значение из функции bash] (http://stackoverflow.com/questions/3236871/how-to-return-a-string-value-from-a-bash-function) –

+0

@ivan_pozdeev - Я сделал кое-что, и я признаю, что сценарии bash далеки от моей сильной стороны. Я думаю, что легко понять, что это не вопрос, написанный без задумки. SO подходит для решения именно этих проблем, а не только проблем, которые никогда не были замечены. Мы используем сообщество, чтобы улучшить нашу работу быстрее. Получив этот ответ, вы поможете мне как сэкономить несколько часов, так и научиться. Я действительно не понимаю, как вопрос, который вы опубликовали, является дубликатом. Угадайте, что я нообер, чем сценарий reg bash. – Avi

ответ

1

Создайте переменную с командной строки и выполнить его

function revert() { 
    cmd="svn st | grep '$1' | awk '{print \$2}' | xargs svn revert" 
    eval $cmd 
} 
+0

Это не сработало. Но я добавил 'eval $ cmd' (а не просто' $ cmd'), и он работает. Исправьте свой ответ, чтобы включить эту строку, и я приму это. – Avi

+0

сделано, спасибо Ави. –

0

Нет необходимости использовать функцию, оттянуть функцию, просто используйте ниже вас сценарий:

svn st | grep "$1" | awk '{print \$2}' | xargs svn revert 
+0

Я попытался это, но получает эту ошибку синтаксиса: 'AWK: ошибка синтаксиса в исходной строке 1 контекста \t >>><<< AWK: незаконное заявление в исходной строке 1 \t отсутствует}' Были ли идея? – Avi

+1

'' 'экранируется дважды, один раз, находясь внутри одиночных кавычек и снова с обратной косой чертой. Обратная косая черта может быть опущена. – chepner

+1

@Cheers Функция является ключевой частью вопроса: она определена в '.bash_profile', так что ее можно использовать в командной строке без ввода всего конвейера. – chepner

Смежные вопросы