【发布时间】:2018-09-20 05:49:30
【问题描述】:
我们可以定义git alias 来运行这样的shell命令:
[alias]
echo = !echo
echo2 = !echo "$1" && echo "====" && echo "${@:2}" && :
(使用最后一个&& :,因为命令行参数被git再次附加到命令中,:将它们变成no-op。)
现在我的问题是 git 如何运行这些命令。
它会生成一个 shell(如 sh)来运行它吗?
我在两台计算机上尝试了上述别名,一台ubuntu 和一台centos。在ubuntu 中,echo2 无法扩展参数${@:2},在bash 中扩展为从第二个到列表末尾的args。
我猜ubuntu 中使用了sh,但sh 是指向dash 的链接。不幸的是dash 不知道${@:2}。在 centos sh 链接到 bash 并且它可以工作。
我们能否有办法选择运行这些别名时使用的 shell?
【问题讨论】:
-
也许你可以在你的别名前面加上
bash -c以确保它在 bash 中运行 -
@MikhailBurshteyn,那我不知道如何正确引用预兆
-
参数在常规(非 git)别名中也不能像您期望的那样工作:
"$1"/"$@"/etc 不是指别名的参数,而是 shell 上下文中的参数在其中调用该别名