0

有人知道我在这里做错了什么吗?在第 1 行 ( )DIFFS之后包含以逗号分隔的文件路径列表。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输出:

+ 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

4

1 回答 1

2

该函数的声明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

运行带有参数的命令,忽略任何名为command的 shell 函数。

于 2019-10-02T20:03:23.710 回答