Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WSL-当linux二进制文件在Bash中不可用时,如何回退到exe_Bash_Windows Subsystem For Linux - Fatal编程技术网

WSL-当linux二进制文件在Bash中不可用时,如何回退到exe

WSL-当linux二进制文件在Bash中不可用时,如何回退到exe,bash,windows-subsystem-for-linux,Bash,Windows Subsystem For Linux,我需要能够编写既能在常规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 -

我需要能够编写既能在常规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.

如何将其推广到任何给定的命令?i、 码头工人、货物、柴油机等。