打开一个命令或另一个命令的bash命令

3

我正在使用两个不同的操作系统。

  • 对于MacOS:打开file.pdf(它会在Mac中的默认pdf程序中打开pdf)
  • 对于Linux:xdg-open file.pdf(它会在Linux中这样做)

如果我交换命令,它就无法正常工作。 有没有单行命令集,例如:

  • open file.pdf或xdg-open file.pdf

我想要一个命令(或一组命令),可以在两个操作系统上都能正常工作,而且不会显示任何错误。 我需要这个命令的地方是在make文件中。

我的makefile如下:

all:
open file.pdf
xdg-open file.pdf
other things ..

在这里,如何确保make命令在Mac和Linux上都能无错误运行?感谢@rubiks,现在代码可以正常工作。代码如下:
# set pdfviewer for linux and unix machines
####################################################

UNAME_S := $(shell uname -s)

$(info $$UNAME_S == $(UNAME_S))

ifeq ($(UNAME_S),Linux)
PDFVIEWER := xdg-open
else ifeq ($(UNAME_S),Darwin)
PDFVIEWER := open
else

$(error unsupported system: $(UNAME_S))
  endif
$(info $$PDFVIEWER == $(PDFVIEWER))
####################################################
# open the pdf file
default: all
    $(PDFVIEWER) my_pdf_filename.pdf    
3个回答

7
我认为更好的做法是更加智能地确定你所使用的操作系统:
```

我认为更好的做法是更加智能地确定你所使用的操作系统:

```
if [ `uname` == "Darwin" ]; then
  open file.pdf
else
  xdg-open file.pdf 
fi

如果您想配置终端以便始终使用相同的命令,我建议将以下内容添加到您的.bashrc或.bash_profile文件中:
if [ `uname` == "Linux" ]; then
   alias open=xdg-open
fi

这样,您始终可以使用命令open,并且它在两种操作系统上都能正常工作。

1
如果您不介意调用shell,您可以从Makefile内部查询系统并相应地设置PDFVIEWER
UNAME_S := $(shell uname -s)

$(info $$UNAME_S == $(UNAME_S))

ifeq ($(UNAME_S),Linux)
  PDFVIEWER := xdg-open
else ifeq ($(UNAME_S),Darwin)
  PDFVIEWER := open
else
  $(error unsupported system: $(UNAME_S))
endif

$(info $$PDFVIEWER == $(PDFVIEWER))            

这对我有用。感谢@rubiks。如果我有超过15个点,我会给你点赞的。 - BhishanPoudel
@BhishanPoudel 没问题,我很高兴你已经解决了问题! :-) - rubicks

0
您可以尝试使用which命令返回第一个可用的可执行文件,例如:
open  := $(shell which open xdg-open | head -n1)
xargs := $(shell which gxargs xargs  | head -n1) # Another example.

然后运行它:

$open file.pdf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接