Возьмите строку через запятую и добавьте ее в команду - PullRequest
0 голосов
/ 02 октября 2019

Кто-нибудь знает, что я здесь делаю не так? DIFFS содержит разделенный запятыми список путей к файлам после строки 1 (foo/bar,baz/bat.php). Если я просто скопирую и вставлю это в остальную часть строки 2 в реальном терминале, я получу то, что ожидаю. Выполнение этого с помощью скрипта, в котором я работаю, выполняется всегда, а затем возвращает новое приглашение без ошибок. Я попробовал несколько вещей, но мой bash fu очень слабый ...: S

#!/bin/bash

...

function phpmd() {
    DIFFS=`git diff development --name-only | xargs | sed 's/ /,/g'`
    phpmd ${DIFFS} text phpmd.xml
}

...

case "$1" in
somecase)
   somecase ${@:2}
   ;;
phpmd)
   phpmd
   ;;
....
*)
   showUsage)
   ;;
esac

Даже если я просто делаю это в iTerm, это работает.

prompt$ DIFFS=`git diff development --name-only | xargs | sed 's/ /,/g'`
prompt$ phpmd $DIFFS text phpmd.xml
/path/to/SomeController.php:58  The class SomeController has 1046 lines of code. Current threshold is 1000. Avoid really long classes.
...

Править: Это называется как function в большем сценарии следующим образом, если это имеет значение. Отредактировал приведенный выше блок кода для отражения. Я использовал эти две строки в отдельной функции, и они отлично работали, поэтому я не понимаю, что такое расширенный сценарий obvs ...

set -x output:

+ set -x
++ git diff development --name-only
++ xargs
++ sed 's/ /,/g'
+ DIFFS=app/Http/Controllers/TrackerController.php,docker/kubernetes/configmap-php-ini-worker.yaml,src/Packages/CoreFilter.php
+ phpmd app/Http/Controllers/TrackerController.php,docker/kubernetes/configmap-php-ini-worker.yaml,src/Packages/CoreFilter.php text phpmd.xml

простоцикл сотни и сотни раз, пока я не Ctrl + C

1 Ответ

2 голосов
/ 02 октября 2019

Объявление функции phpmd "скрывает" программу phpmd на вашем пути. Вам следует переименовать вашу функцию во что-то другое:

function runphpmd() {

И также обновить сайт вызова:

phpmd)
   runphpmd
   ;;

В качестве альтернативы, вы можете использовать command встроенный чтобы избежать рекурсивного вызова функции с именем phpmd:

function phpmd() {
    DIFFS=`git diff development --name-only | xargs | sed 's/ /,/g'`
    command phpmd ${DIFFS} text phpmd.xml
}

Из документации для command:

Запускает команду с аргументы игнорирование любой функции оболочки с именем команда .

...