本文介绍了WSL-当Linux二进制文件在Bash中不可用时如何回退到exe的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要做的是编写既能在常规Unix系统上运行又能在WSL上运行的脚本,并在未安装Linux One/in PATH时尝试使用EXE版本的命令。
这是我当前使用的代码,但我想知道是否有更简单、不那么详细的方法可以使用?
if ! command -v docker && command -v docker.exe &>/dev/null; then
DOCKER=docker.exe
else
DOCKER=docker
fi
if ! command -v cargo &>/dev/null && command -v cargo.exe &>/dev/null; then
CARGO=cargo.exe
else
CARGO=cargo
fi
推荐答案
像处理此类问题一样,创建一个函数。
docker() {
if hash docker >/dev/null 2>&1; then
command docker "$@"
elif hash docker.exe >/dev/null 2>&1; then
docker.exe "$@"
else
# just to get nice docker: command not found message
command docker "$@"
fi
}
# will run docker.exe or docker
docker run -ti --rm alpine echo hello world
哈,太有趣了。请注意,eval
是邪恶的。
gen_functions() {
for i; do
eval "
$i() {
if hash $i >/dev/null 2>&1; then
command $i "$@"
elif hash $i.exe >/dev/null 2>&1; then
$i.exe "$@"
else
command $i "$@"
fi
}
"
done
}
# will define function for each argument
gen_functions docker cargo diesel
或者更有选择性,等等:
mask_function() {
local cmd
cmd=$1
shift
if hash "$cmd" >/dev/null 2>&1; then
command "$cmd" "$@"
elif hash "$cmd".exe >/dev/null 2>&1; then
"$cmd".exe "$@"
else
command "$cmd" "$@"
fi
}
docker() { mask_function docker "$@"; }
cargo() { mask_function cargo "$@"; }
# etc.
这篇关于WSL-当Linux二进制文件在Bash中不可用时如何回退到exe的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!