Команда xargs молча терпит неудачу при использовании в псевдониме bash - PullRequest
0 голосов
/ 05 июля 2018

В командной строке это открывает два файла в моем приложении phpstorm:

git diff --name-only final-migration | xargs pstorm

Когда я создаю псевдоним в моем ~ / .bash_profile:

alias ropen="git diff --name-only $1 | xargs pstorm"

и вызвать его из той же директории, что и успешная команда:

ropen final-migration

Ничего не происходит .. Я пытался изменить псевдоним, чтобы он отображался вместо xargs pstorm, который работает, как ожидалось. Кажется, что xargs - вот где проблема, когда он используется в псевдониме ... Я не уверен, что мне не хватает.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Проблема была с моей версией xargs, которая поставляется с OSX. Используя версию GNU, предложение @ socowi об использовании функции сработало просто отлично.

Чтобы установить gnu-версию xargs, я сделал, как сказал @Benjamin W, и использовал homebrew для установки findutils. Затем я добавил путь, предложенный при установке findutils, в мой ~ / .bash_profile.

0 голосов
/ 05 июля 2018

Первая проблема

Псевдонимы не работают с такими параметрами, как $1. Единственный способ для псевдонимов использовать аргументы - поместить их в конец. Но даже если $1 будет работать для псевдонимов, ваше определение не будет работать, потому что "$1" раскрывается во время определения.
Вы можете напечатать значение "$1" с помощью echo "$1". Для меня это пусто. Так что псевдоним ...

alias ropen="git diff --name-only $1 | xargs pstorm"

... будет эквивалентно ...

alias ropen="git diff --name-only | xargs pstorm"

Чтобы использовать $1 по назначению, напишите функцию:

ropen() { git diff --name-only "$1" | xargs pstorm; }

Возможная вторая проблема

xargs будет искажать аргументы, если напечатанные пути содержат пробелы. Предположим, что git diff --names-only напечатает пути a b/c и x/y z, тогда xargs создаст команду pstorm "a" "b/c" "x/y" "z". Ни один из этих файлов не существует.

Чтобы разрешить пробелы, используйте xargs -d '\n' pstorm, это создаст правильную команду pstorm "a b/c" "x/y z".

...