如何在 shell 脚本中检测 windows 操作系统

如何在 shell 脚本中检测 windows 操作系统

我想用 shell 编写一个跨平台脚本,这样我就可以在 linux、mac os 和 windows 上运行它。我在 windows 上使用 cygwin 来实现这一点。但是,有些自定义命令我只需要在 windows 上执行。有没有办法在 shell 脚本中检测 shell 是否在 windows 上运行?谢谢!

答案1

您可以解析命令的输出uname来确定底层操作系统。

答案2

找到了一个绝妙的解决方案https://nastytester.com/posts/script-that-works-in-windows-and-linux.html

本质上,您正在创建一个 bash 函数,它将同时利用 Windows CMD 中的 goto 命令。

    echo off
    
    goto(){
    # Linux code here
    uname -o
    }
    
    goto $@
    exit
    
    :(){
    rem Windows script here
    echo %OS%
    exit

如果您需要传递参数,您可以使用我的版本:

    echo off
    
    goto(){
    # Linux code here
    echo -n 'Found OS Type: '
    uname -o
    sleep 5
    if [[ -z "$@" ]]; then
      echo "No argument was detected. Project argument is required."
      sleep 5
      exit
    else
      ./linux_launch.sh $@
    fi 
    }
    
    goto $@
    echo "End of Linux function."
    exit
    
    :(){
    rem Windows script here
    echo.Found OS Type: 
    echo %OS%
    set ARG=%1
    echo %ARG%
    if [%ARG%]==[] goto NOARG
    timeout /t 5
    start /wait cmd.exe /c ".\master_launch_1.bat %ARG%"
    goto EOF
    :NOARG
    echo.No argument was detected. Project argument is required.
    :EOF
    echo.End of Windows function.
    timeout /t 5

相关内容