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

时间:2016-09-06 10:14:56

标签: 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

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

if is Linux; then
    xdg-open $filename.pdf
elif is OS X; then
    open $filename.pdf
fi

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分:3)

我建议您尝试执行功能检测,而不是尝试执行功能检测,而不是在使用未在所有平台上实现的功能之前,尝试检测它是否支持当前平台,不管是什么。你可以做如下的事情

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

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