如何使shell脚本在Linux和OS X上运行?

Spa*_*ine 2 linux macos shell compatibility

我有一段代码来编译tex文档.

#!/usr/bin/env bash

filename="thesis"

pdflatex -shell-escape $filename
makeglossaries $filename
bibtex $filename
pdflatex $filename
pdflatex $filename

# for Ubuntu
#xdg-open $filename.pdf

# for mac
open $filename.pdf
Run Code Online (Sandbox Code Playgroud)

如何使此脚本在Linux和OS X上运行?我认为应该是这样的,

if is Linux; then
    xdg-open $filename.pdf
elif is OS X; then
    open $filename.pdf
fi
Run Code Online (Sandbox Code Playgroud)

red*_*neb 6

我建议您不要尝试检测操作系统,而是尝试进行功能检测,即在使用未在所有平台上实现的东西之前,尝试检测当前平台是否支持该东西,无论是什么。你可以做类似的事情如下

if command -v xdg-open >/dev/null 2>&1; then
    xdg-open $filename.pdf
elif command -v open >/dev/null 2>&1; then
    open $filename.pdf
else
    echo >&2 "I don't know how to open the pdf"
fi
Run Code Online (Sandbox Code Playgroud)

上面的代码command -v xdg-open >/dev/null 2>&1将检查您的路径中是否有一个名为的程序xdg-open可用。如果是的话,我们就用它。否则,我们将尝试不同的选择。


bgo*_*dst 5

检测当前平台的标准方法是调用uname:

uname=$(uname);
case "$uname" in
    (*Linux*) openCmd='xdg-open'; ;;
    (*Darwin*) openCmd='open'; ;;
    (*CYGWIN*) openCmd='cygstart'; ;;
    (*) echo 'error: unsupported platform.'; exit 2; ;;
esac;
"$openCmd" "$filename.pdf";
Run Code Online (Sandbox Code Playgroud)