我们可以定义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
,并且有效。
我们是否可以选择一种用于运行这些别名的外壳程序?
答案 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
运行
功能。