Rot*_*eti 12 windows cygwin file-association shell-script double-click
我在 Windows 机器上创建了一个 .sh 脚本文件。我想双击运行它。如果我打开 Cygwin 终端并使用“sh”命令手动启动它,它会毫无问题地运行。
当我将 .sh 文件结尾与 c:\cygwin\bin\sh.exe 关联并双击 script.sh 时,终端会弹出一毫秒,然后消失无效。我认为问题是 sh.exe 需要像这样启动:
C:\cygwin64\bin\sh.exe --login –i
Run Code Online (Sandbox Code Playgroud)
但是我如何告诉 Windows 运行这样的 .sh 文件呢?
您必须添加一个%1参数才能使关联起作用,例如,像这样(需要引号才能处理具有嵌入空格的路径):
C:\cygwin64\bin\sh.exe -li "%1"
Run Code Online (Sandbox Code Playgroud)
之前在几个地方问过这个问题;这些可能会有所帮助:
但是,该窗口将在脚本完成时关闭 - 除非您在脚本中对此进行了一些规定,例如,通过在其后使用read命令(因为关联仅将脚本作为参数传递)。以下是关于这方面的一些讨论:
我对这里和互联网上其他地方的其他答案不满意,所以我花了大量时间研究如何正确地做到这一点。这是我想出的。
.sh并将其(Default)值设置为Shell Scriptunder HKEY_CLASSES_ROOT。
Shell Scriptunder的键HKEY_CLASSES_ROOT,并将(Default)值设置为Shell Script。shell下的密钥HKEY_CLASSES_ROOT\Shell Script。openunder的键并将值HKEY_CLASSES_ROOT\Shell Script\shell设置(Default)为Run with Cygwin。commandunder的键并将值HKEY_CLASSES_ROOT\Shell Script\shell\open设置(Default)为"C:\cygwin64\bin\mintty.exe" -i /Cygwin-Terminal.ico C:\cygwin64\bin\bash.exe -l -c "cd $(dirname \"$(cygpath -u \"%1\")\") ; $(cygpath -u \"%1\") ; exec bash"(如果您使用的是 32 位版本,则更C:\cygwin64\改为C:\cygwin\)。现在您只需双击您的 .sh 文件,它就会按照您的预期运行。
奖金:
DefaultIconunder的键并将值HKEY_CLASSES_ROOT\Shell Script设置(Default)为%SystemRoot%\System32\imageres.dll,-68。这会将标准的批处理文件图标应用于您的 shell 脚本。 我还创建了一个注册表补丁文件(另存为Run With Cygwin.reg):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.sh]
@="Shell Script"
[HKEY_CLASSES_ROOT\Shell Script]
@="Shell Script"
[HKEY_CLASSES_ROOT\Shell Script\DefaultIcon]
@="%SystemRoot%\\System32\\imageres.dll,-68"
[HKEY_CLASSES_ROOT\Shell Script\shell]
[HKEY_CLASSES_ROOT\Shell Script\shell\open]
@="Run with Cygwin"
[HKEY_CLASSES_ROOT\Shell Script\shell\open\command]
@="\"C:\\cygwin64\\bin\\mintty.exe\" -i /Cygwin-Terminal.ico C:\\cygwin64\\bin\\bash.exe -l -c \"cd $(dirname \\\"$(cygpath -u \\\"%1\\\")\\\") ; $(cygpath -u \\\"%1\\\") ; exec bash\""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26833 次 |
| 最近记录: |