Šim*_*bec 5 windows bash ubuntu docker windows-subsystem-for-linux
我在Windows上的Ubuntu上使用Bash,在Windows 10上运行bash的方式。我安装了Creators更新,而Ubuntu版本是16.04。
我最近在玩npm,node.js和Docker,对于docker,我发现可以在Windows中安装并运行它,而仅使用bash的客户端部分,直接从Windows的Program Files中调用docker.exe文件文件文件夹。我只是更新了path变量,将docker的路径包括为PATH=$PATH:~/mnt/e/Program\ Files/Docker/
(放在.bashrc中),然后可以通过bash call运行docker docker.exe
。
但是,嘿,这个bash,我不想在命令(程序)的末尾写.exe。我可以简单地添加一个别名alias docker="docker.exe"
,但是接下来我想使用docker-compose,我必须添加另一个。我当时正在考虑向.bashrc中添加一个脚本,该脚本将遍历路径变量,并在该路径变量中指定的每个路径中搜索.exe文件,并为每次出现的事件添加一个别名,但这似乎不是一个很干净的解决方案(但我猜它会很好地达到其目的)。
有没有简单干净的解决方案来实现这一目标?
我在尝试从 WSL使用Docker for Windows时遇到了同样的问题。
有大量现有的 shell 脚本可以在 Linux 下正常运行,并且大部分也在 WSL 下运行,直到由于docker: command not found
. 到处更改docker
到docker.exe
会过于繁琐,不便于携带。
shopt -s expand_aliases
alias docker=docker.exe
alias docker-compose=docker-compose.exe
Run Code Online (Sandbox Code Playgroud)
但是它要求每个脚本都以交互模式运行,并且在不修改脚本的情况下仍然无法在反引号内工作。
docker() { docker.exe "$@"; }
export -f docker
docker-compose() { docker-compose.exe "$@"; }
export -f docker-compose
Run Code Online (Sandbox Code Playgroud)
这有效。但是添加每个需要的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"
Run Code Online (Sandbox Code Playgroud)
使其可执行: 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
Run Code Online (Sandbox Code Playgroud)
该脚本会自动选择$PATH 中任何 Windows 可执行文件的绝对路径,并将其符号链接到~/.local/bin
WSL 上的 $PATH 中,而没有扩展名。
如果需要,可以轻松地进一步扩展此方法以自动链接给定目录中的任何 exe。但是链接整个 $PATH 将是一种矫枉过正。)
您应该能够简单地将可执行目录设置为您的 PATH。使用导出来持久化。
命令:export PATH=$PATH:/path/to/directory/executable/is/ located/in
归档时间: |
|
查看次数: |
1123 次 |
最近记录: |