我想用 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