如何在Windows下向.sh脚本传递参数?

3

我正在尝试在Windows下执行.sh脚本。我安装了Git,这使我能够执行.sh文件。然而,我似乎无法在不以"sh"为前缀的情况下传递任何参数:

我的.sh文件:

echo "Test" $1

如果我使用以下方式执行它:

> sh test.sh 123

我明白了,以下是您需要翻译的内容:

我得到

测试 123

然而,如果我只是执行它

> test.sh 123

我明白您的意思。

测试

我知道有可能执行带参数的.sh脚本而无需在前面加上"sh",因为通过某种组合配置方法,我以前的电脑上成功实现过。对于如何完成此操作,您有什么猜测吗?


从assoc中我看到.sh=sh_auto_file,从ftype中我看到sh_auto_file="C:\Program Files\Git\git-bash.exe" --no-cd "%L" %*。应该改成什么样子?如何更改呢? - ThePiachu
尝试在sh文件的第一行添加#!/usr/bin/env bash - Elliott Frisch
1
好的,关联已经传递了参数,所以看起来没问题。它正在运行git-bash.exe而不是sh,但我猜那些是同义词?git-bash test.sh 123是什么意思? - Harry Johnston
它打印出 测试 123。我的另一台计算机的配置是 sh_auto_file="C:\Program Files (x86)\Git\bin\sh.exe" "--login" "%1" %*。顺便问一下,我如何更改 ftype 配置? - ThePiachu
1
根据帮助文档使用 ftype 命令,例如:ftype sh_auto_file=git-bash "%1" %* - Harry Johnston
显示剩余2条评论
1个回答

0

正如评论中@HarryJohnston所解释的那样,解决这个问题的第一步是找出assocftype的关联。在我的情况下,assoc很可能会返回.sh=sh_auto_file,而ftype则返回sh_auto_file="C:\Program Files\Git\git-bash.exe" --no-cd "%L" %*。问题的一部分类似于此问题 - Windows没有将参数传递给.sh文件。为了解决这个问题,sh_auto_file关联需要以/或者包含"%1" %*作为其中的一部分。然而,问题的另一部分是(至少在我使用的Windows 10中),注册表中可能有多个地方记录错误。最终,我不得不手动更改注册表中2-3个条目,以便它最终能够正常工作:"C:\Program Files (x86)\Git\bin\sh.exe" "%1" %*。要查找这些位置,请搜索.shsh_auto_file并相应地进行替换。

奖励:为了使.sh文件无需在结尾处写“.sh”即可执行,可以将.SH添加到环境变量中的pathext中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接