Windows 10,符号链接:行为差异,bash与cmd shell

问题描述

我只有一个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:

是的,我很清楚bashcmd是两个不同的解释器。不知道您是否注意到了,但是我不是要cmd来解释bash脚本;我要问的是让Windows / cmd以应有的方式处理符号链接。

符号链接在Unix中已经存在了一段时间,然后才在Windows上实现。并且根据Microsoft page本身:

符号链接旨在帮助迁移和应用 与UNIX操作系统的兼容性。 Microsoft已实施 它的符号链接就像UNIX链接一样起作用

因此,我要问的是,只要微软声称符号链接在Windows中的行为与在Unix中的行为相同,我是否会丢失某些东西……包括“ $ 0”的结果。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...