如何将参数传递给Windows下的.sh脚本?

How to pass parameters to an .sh script under Windows?

我正在尝试在 Windows 下执行 .sh 脚本。我安装了 Git,它允许我执行 .sh 文件。但是,如果不在执行前加上 "sh":

前缀,我似乎无法传递任何参数

我的 .sh 文件:

echo "Test" 

如果我执行它:

> sh test.sh 123

我明白了

Test 123

但是,如果我只是将其执行为

> test.sh 123

我明白了

Test

我知道可以使用参数执行 .sh 脚本而不用 "sh" 作为前缀,因为通过一些配置组合我能够以某种方式在我的旧计算机上执行它。关于如何完成此操作的任何猜测?

正如@HarryJohnston 在评论中所解释的那样,解决此问题的第一步是弄清楚 assocftype 关联。 assoc 很可能会 return .sh=sh_auto_file,而在我的情况下,ftype return 会 sh_auto_file="C:\Program Files\Git\git-bash.exe" --no-cd "%L" %*。问题的一部分类似于正在发生的事情 in this issue - Windows 没有将参数传递给 .sh 文件。为了解决这个问题,sh_auto_file 关联显然需要以 / have "%1" %* 结尾。但是,问题的另一部分是(至少在我的情况下 Windows 10),注册表中可能有多个地方有错误的记录。最后我不得不手动将注册表中的 2-3 个条目更改为 "C:\Program Files (x86)\Git\bin\sh.exe" "%1" %* 以使其最终起作用。要找到这些地方,请搜索 .shsh_auto_file 并进行相应替换。

奖励:要使 .sh 文件执行时不必在末尾写“.sh”,请将 .SH 添加到环境变量中的 pathext