Windows上的Bash - exe文件的别名

8
我正在使用Windows 10上的Ubuntu的Bash,这是在Windows 10上运行bash的方式。我已安装Creators更新,Ubuntu版本为16.04。
最近我在尝试使用npm、node.js和Docker等工具,对于Docker,我发现可以在Windows上安装并运行它,只需从bash中调用来自Windows的Program Files文件夹的docker.exe文件的客户端部分即可。我只需更新路径变量以包含docker的路径,例如PATH=$PATH:~/mnt/e/Program\ Files/Docker/(放在.bashrc中),然后就可以从bash中调用docker.exe来运行docker。
但是,嘿,这是bash,我不想在命令(程序)末尾写".exe"。我可以简单地添加一个别名alias docker="docker.exe",但是如果我想使用docker-compose呢?我必须再添加另一个别名。我考虑在.bashrc中添加一个脚本,该脚本将遍历路径变量并搜索路径变量中指定的每个路径中的.exe文件,并为每个出现的文件添加一个别名,但这似乎不是一个非常干净的解决方案(但我想它会非常好地完成其工作)。
有没有简单而干净的解决方案来实现这一点呢?

只需要在.bashrc文件中添加两个命令即可。1)PATH变量 2)别名。我觉得看起来很干净。 - skr
我讨厌别人在问题之外提出不同的建议,但现在我正在这样做:使用Linux。 - franzisk
3个回答

8
我在尝试使用WSL中的Docker for Windows时,遇到了同样的问题。
已经有很多现有的Shell脚本在Linux下运行良好,在WSL下也大部分正常,直到出现“docker:command not found”的错误。在所有地方更改dockerdocker.exe将会过于繁琐和不可移植。

起初尝试在~/.bashrc中使用别名的解决方法,具体请见这里

shopt -s expand_aliases
alias docker=docker.exe
alias docker-compose=docker-compose.exe

但它要求每个脚本在交互模式下运行,而且在没有脚本修改的情况下无法在反引号中工作

然后在~/.bashrc中尝试使用exported bash functions

docker() { docker.exe "$@"; }
export -f docker
docker-compose() { docker-compose.exe "$@"; }
export -f docker-compose

这个可以运行。但是添加每个需要的exe仍然太繁琐。
最终采用更简单的符号链接方法和修改过的wslshim自定义辅助脚本。

只需将以下内容添加至~/.local/bin/wslshim中:

#!/bin/bash -x
cd ~/.local/bin && ln -s "`which $1.exe`" "$1" || ln -s "`which $1.ps1`" "$1" || ln -s "`which $1.cmd`" "$1" || ln -s "`which $1.bat`" "$1"

使其可执行:chmod +x ~/.local/bin/wslshim

然后添加任何“别名”都变得非常简单,只需输入两个单词:

$ wslshim docker
+ cd ~/.local/bin
++ which docker.exe
+ ln -s '/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe' docker

$ wslshim winrm
+ cd ~/.local/bin
++ which winrm.exe
+ ln -s '' winrm
ln: failed to create symbolic link 'winrm' -> '': No such file or directory
++ which winrm.ps1
+ ln -s '' winrm
ln: failed to create symbolic link 'winrm' -> '': No such file or directory
++ which winrm.cmd
+ ln -s /mnt/c/Windows/System32/winrm.cmd winrm

该脚本会自动获取$PATH中任何Windows可执行文件的绝对路径,然后将其符号链接到没有扩展名的~/.local/bin中,在WSL上也位于$PATH中。
如果需要,这种方法可以很容易地进一步扩展为自动链接给定目录中的任何exe。但是将整个$PATH链接起来可能会过度。

0

您应该能够将可执行目录简单地设置为 PATH。 使用 export 命令来保持。

命令: export PATH=$PATH:/path/to/directory/executable/is/located/in


嗨,Thomas,原帖的作者已经知道了这一点,并正在寻找更“简单干净”的解决方案。 - Rafael
我刚刚重新阅读了你的问题。非常抱歉,但据我所知,没有更简单的解决方案 :( - Thomas

0
在我的Windows 10中,解决方案是安装git-bash和Docker for Windows。
在这个bash中,当我按下“docker”时,它可以工作,例如“docker ps”,我不需要创建别名或更改路径。
您可以从https://git-scm.com/download/win下载git-bash。
然后从开始按钮搜索“git bash”。
希望这个解决方案对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接