我在Windows上使用msysgit,并编写了一个我想使用的简单shell脚本。我将.sh文件所在的文件夹添加到了Windows计算机的PATH变量中,但当我想使用脚本时,我必须键入rd.sh,而不仅仅是普通的rd.
如何通过只引用它的名称rd而不是带有.sh文件扩展名(rd.sh)的完整文件名来使用它?
msysgit提供的shell是bash,它在类似Unix的模拟环境中运行。
如果从bash shell运行脚本,则需要键入脚本的名称,就类Unix环境而言,该名称为rd.sh
。.sh
在Unix环境中没有特别的意义;它只是文件名的最后三个字符。脚本的第一行应该是#!/bin/sh
或#!/bin/bash
;这被称为"shebang"。
另一方面,如果要从Windows(例如,从cmd.exe
命令提示符)运行它,则Windows将使用.sh
扩展来确定如何执行它,并且如果(a)它在%PATH%
中的目录中,并且(b)Windows已配置(在"文件夹选项"和/或通过设置%PATHEXT%
)使用sh
或bash
来启动.sh
文件,则可以将它调用为rd
。
如果您希望能够在任何一个环境中运行相同的脚本,您可以创建一个符号链接,该链接将在模拟的类Unix环境中被识别。例如,如果rd.sh
在$HOME/bin
中,则此:
ln -s $HOME/bin/rd.sh $HOME/bin/rd
将创建适当的符号链接。(您可以将rd
设为rd.sh
的副本,但对其中一个的更改将不适用于另一个。)
如果您只需要从bash运行它,只需将其称为rd
而不是rd.sh
;正如我所提到的,就bash而言,.sh
扩展只是名称的一部分,没有特别的意义。告诉bash如何执行脚本的是#!
行,而不是.sh
扩展。
(严格来说,不是bash处理#!
。在实际的Unix或Linux系统上,它是由内核处理的;我不确定msysgit下的确切机制是什么。)
通常情况下,您可以将扩展.sh
添加到PATHEXT
环境变量中。PATHEXT
是一个以分号分隔的扩展列表,将其视为可执行文件。
然而,由于windows没有内置对shell脚本的支持(显然除了批处理文件等),我不能100%确定这是否可行。