使用`where` 命令找到`gitk` 程序但无法执行?
`gitk` program found using the `where` command but cannot be executed?
我正尝试在 Windows 上 运行 gitk,但控制台显示:
'gitk' is not recognized as an internal or external command,
operable program or batch file.
不过,我可以做到
> where gitk
C:\Program Files (x86)\Git\bin\gitk
怎么来的?
更新:窃取 OP 的评论:
Thanks for a (lengthy) explanation, the easiest fix for me was to move from the old msysGit (1.9.5) version to the newer "Git for Windows" builds which has a proper Windows wrapper for gitk.
gitk
与大多数 git 命令不同,它是一个调用 Tcl 的 shell 脚本。
如果您检查 gitk
可执行文件本身,它的前几行是:
#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec wish "[=10=]" -- "$@"
(至少在我的 Linux 系统上是这样;gitk
的 Windows 安装程序可能会改变它。)
在类 Unix 系统上,第一行称为 "shebang",告诉系统调用 /bin/sh
来执行文件而不是直接执行它。
第三行执行wish
命令,将脚本作为Tcl脚本执行
如果您的 Windows 系统上安装了 Tcl,您应该能够 运行 gitk
作为 Tcl 脚本使用如下内容:
C:\> tclsh "C:\Program Files (x86)\Git\bin\gitk"
(免责声明:我没有尝试过。)
您也可以将命令的名称从 gitk
更改为 gitk.tcl
并在 Windows 中设置文件关联,以便正确调用它。 (我有点惊讶 Windows git 安装程序没有为你做这件事。)
有关 Windows 上 运行ning Tcl 脚本的更多信息,请参见 here。
和 this question 讨论了从上下文菜单而不是从命令行在 Windows 上调用 gitk
。
我正尝试在 Windows 上 运行 gitk,但控制台显示:
'gitk' is not recognized as an internal or external command,
operable program or batch file.
不过,我可以做到
> where gitk
C:\Program Files (x86)\Git\bin\gitk
怎么来的?
更新:窃取 OP 的评论:
Thanks for a (lengthy) explanation, the easiest fix for me was to move from the old msysGit (1.9.5) version to the newer "Git for Windows" builds which has a proper Windows wrapper for gitk.
gitk
与大多数 git 命令不同,它是一个调用 Tcl 的 shell 脚本。
如果您检查 gitk
可执行文件本身,它的前几行是:
#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec wish "[=10=]" -- "$@"
(至少在我的 Linux 系统上是这样;gitk
的 Windows 安装程序可能会改变它。)
在类 Unix 系统上,第一行称为 "shebang",告诉系统调用 /bin/sh
来执行文件而不是直接执行它。
第三行执行wish
命令,将脚本作为Tcl脚本执行
如果您的 Windows 系统上安装了 Tcl,您应该能够 运行 gitk
作为 Tcl 脚本使用如下内容:
C:\> tclsh "C:\Program Files (x86)\Git\bin\gitk"
(免责声明:我没有尝试过。)
您也可以将命令的名称从 gitk
更改为 gitk.tcl
并在 Windows 中设置文件关联,以便正确调用它。 (我有点惊讶 Windows git 安装程序没有为你做这件事。)
有关 Windows 上 运行ning Tcl 脚本的更多信息,请参见 here。
和 this question 讨论了从上下文菜单而不是从命令行在 Windows 上调用 gitk
。