git shell命令别名不能正确扩展$ @

时间:2018-09-20 05:49:30

标签: git shell

我们可以定义git alias来运行像这样的shell命令:

[alias]
    echo = !echo
    echo2 = !echo "$1" && echo "====" && echo "${@:2}" && :

(使用最后一个&& :是因为git再次将命令行参数附加到命令中,并且:将它们转换为no-op。)

现在我的问题是 git如何运行这些命令。 是否会产生外壳程序(例如sh)来运行它?

我在两台计算机上尝试了上述别名,其中一台ubuntu和一台centos。在ubuntu中,echo2无法扩展参数${@:2},该参数在bash中被扩展为从列表的第二个到末尾的args。

我猜想在ubuntu中使用了sh,但是sh是指向dash的链接。不幸的是dash不知道${@:2}。在centos中,sh已链接到bash,并且有效。

我们是否可以选择一种用于运行这些别名的外壳程序?

1 个答案:

答案 0 :(得分:1)

  

现在我的问题是git如何运行这些命令。它会产生外壳程序(如sh)来运行它吗?

是的。它运行Uncaught (in promise) Error: failed to load 'sap/m/label.js' from ../resources/sap/m/label.js: 404 - Not Found at p1 (jquery.sap.global-dbg.js:3274) at Object.q.sap.require (jquery.sap.global-dbg.js:3840) at f (eval at evalModuleStr (jquery.sap.global-dbg.js:3315), <anonymous>:572:1949) at k (eval at evalModuleStr (jquery.sap.global-dbg.js:3315), <anonymous>:572:2798) at h (eval at evalModuleStr (jquery.sap.global-dbg.js:3315), <anonymous>:572:2754) at g (eval at evalModuleStr (jquery.sap.global-dbg.js:3315), <anonymous>:572:2497) at Q (eval at evalModuleStr (jquery.sap.global-dbg.js:3315), <anonymous>:572:5485) at P (eval at evalModuleStr (jquery.sap.global-dbg.js:3315), <anonymous>:572:5101) at k (eval at evalModuleStr (jquery.sap.global-dbg.js:3315), <anonymous>:572:6172) at h (eval at evalModuleStr (jquery.sap.global-dbg.js:3315), <anonymous>:572:2754) 。参见https://stackoverflow.com/a/39445884/7976758

  

无法扩展参数$ {@:2}

要使用参数运行别名,有两种方法:使用另一级别的Shell或使用Shell函数。例子:

/bin/sh

别名[alias] echo3 = !bash -c 'echo "$0" && echo "====" && echo "${@:1}"' echo4 = !"f() { echo \"$1\" && echo \"====\" && echo \"${@:2}\"; }; f" 声明一个函数并运行它。最后一个echo4运行 功能。