【问题标题】:How to pass parameters to an .sh script under Windows?如何在 Windows 下将参数传递给 .sh 脚本?
【发布时间】:2015-11-13 11:35:09
【问题描述】:

我正在尝试在 Windows 下执行 .sh 脚本。我安装了 Git,它允许我执行 .sh 文件。但是,如果不使用“sh”作为执行前缀,我似乎无法传递任何参数:

我的 .sh 文件:

echo "Test" $1

如果我执行它:

> sh test.sh 123

我明白了

测试 123

但是,如果我只是执行它

> test.sh 123

我明白了

测试

我知道可以执行带有参数的 .sh 脚本,而无需在它们前面加上“sh”前缀,因为通过某种配置组合,我能够以某种方式在我的旧计算机上执行此操作。关于如何实现这一点的任何猜测?

【问题讨论】:

  • 文件关联可能不完整。您可以使用ftypeassoc 命令查看和编辑文件关联。 ftype /? 寻求帮助。
  • @HarryJohnston 来自 assoc 我看到 .sh=sh_auto_file 和来自 ftype - sh_auto_file="C:\Program Files\Git\git-bash.exe" --no-cd "%L" %* 。它应该是什么,我该如何改变它?
  • 尝试将#!/usr/bin/env bash 添加为sh 文件的第一行。
  • 好吧,关联已经传递了参数,所以看起来没问题。它正在运行git-bash.exe 而不是sh 但我猜这些是同义词? git-bash test.sh 123 是做什么的?
  • 根据帮助使用ftype 命令,例如ftype sh_auto_file=git-bash "%1" %*

标签: windows bash shell command-line parameter-passing


【解决方案1】:

正如@HarryJohnston 在 cmets 中所解释的,解决此问题的第一步是找出 assocftype 关联。 assoc 很可能会返回 .sh=sh_auto_file,而在我的情况下,ftype 返回 sh_auto_file="C:\Program Files\Git\git-bash.exe" --no-cd "%L" %*。问题的一部分与in this issue 发生的情况类似——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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 2011-08-31
    • 1970-01-01
    • 2020-07-18
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多