问题描述
我只有一个bash脚本,可以用来启动许多程序。
我称这个脚本为launcher.sh
要使用它,我创建了一个名为myprog
的符号链接,该链接指向launcher.sh
。
在bash shell(MSYS2 / MINGW64)中时
在launcher.sh
中,我确定“脚本本身”的名称($ 0或$ BASH_SOURCE),并得到“ myprog”,因此,我可以相应地进行操作。
在CMD外壳中
在launcher.sh
中,我确定“脚本本身”的名称,然后得到“启动器”,因此,我不知道我应该启动什么程序。
这个问题有解决方案吗?
查尔斯:
感谢您的提问。我进行了测试,测试了您描述的场景,当从bash
内部启动cmd
时,它确实可以正常工作。
请在下面找到一个示例会话;遵循以下顺序:
1.-符号链接所在的目录列表
2.- launcher.sh
的内容
3.-从myprog.sh
执行cmd.exe
失败
4.-从cmd.exe
开始bash
5.-从myprog.sh
内成功执行bash
1.-
C:\Users\salazag>dir C:\Programs\spgcodes\myprog\0.5.0\win10\bin
Volume in drive C is SYSTEM
Volume Serial Number is 1C58-10A0
Directory of C:\Programs\spgcodes\myprog\0.5.0\win10\bin
09/12/2020 01:34 PM <DIR> .
09/12/2020 01:34 PM <DIR> ..
09/08/2020 08:19 PM <SYMLINK> info [C:\Programs\spgcodes\launchinfo.sh]
09/11/2020 03:26 PM <SYMLINK> myprog.sh [C:\Users\salazag\Desktop\launcher.sh]
09/08/2020 08:20 PM 630,612 myprog.x
3 File(s) 630,612 bytes
2 Dir(s) 244,660,219,904 bytes free
2.-
C:\Users\salazag>type .\Desktop\launcher.sh
#!C:/Programs/msys64/usr/bin/bash
this=$BASH_SOURCE
echo "this script name=$this"
3.-
C:\Users\salazag>myprog.sh
this script name=C:\Users\salazag\Desktop\launcher.sh
4.-
C:\Users\salazag>bash
salazag@md2ysbtc /c/Users/salazag> myprog.sh # <--5
this script name=/c/Programs/spgcodes/myprog/0.5.0/win10/bin/myprog.sh
salazag@md2ysbtc /c/Users/salazag>
Mofi:
是的,我很清楚bash
和cmd
是两个不同的解释器。不知道您是否注意到了,但是我不是要cmd
来解释bash
脚本;我要问的是让Windows / cmd以应有的方式处理符号链接。
符号链接在Unix中已经存在了一段时间,然后才在Windows上实现。并且根据Microsoft page本身:
符号链接旨在帮助迁移和应用 与UNIX操作系统的兼容性。 Microsoft已实施 它的符号链接就像UNIX链接一样起作用。
因此,我要问的是,只要微软声称符号链接在Windows中的行为与在Unix中的行为相同,我是否会丢失某些东西……包括“ $ 0”的结果。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)