bash osx通过变量或管道打开文件

时间:2015-04-05 08:58:14

标签: macos bash

我想使用osx open命令打开一个文件,但我所拥有的只是一个包含文件名(和路径)而不是文件名本身的变量。 我试过了:

thisfile=./filename.extension
open $thisfile

thisfile=./filename.extension
printf $thisfile | open

printf ./filename.extension | open

但是在所有这些尝试中我得到了

Usage: open [-e] [-t] [-f] [-W] [-R] [-n] [-g] [-h] [-b <bundle identifier>] [-a <application>] [filenames] [--args arguments]
Help: Open opens files from a shell.

...(全文:http://pastie.org/10074666

我做错了什么?如何通过管道和变量打开文件?


EDIT /溶液

我确实有空格(和括号),我在保存到变量之前使用\进行了转义。事实证明我不应该这样做,我应该使用open "${thisfile}"而不是open $thisfile

所以对于文件

./foo - moo/zoo - boo (100)/poo (too).jpg

使用open变量打开,如下所示

thisfile='./foo - moo/zoo - boo (100)/poo (too).jpg'
open "${thisfile}"

2 个答案:

答案 0 :(得分:1)

正如@ mark-setchell所评论的那样,open不会对stdin采取任何措施。因此,让我们了解第一种情况会出现什么问题。

当您尝试在OSX上使用open命令打开文件时,我会看到三种主要方案:

①文件不存在或有空格:

 % open doesnotexists
The file /path/to/doesnotexists does not exist.
Usage: …
 % open has spaces
The files /path/to/has and /path/to/pyodsdiff/spaces do not exist.
Usage: …

②文件包含破折号:

 % open -notanoption
open: invalid option -- n
Usage: …
 % open --notanoption
open: invalid option `--notanoption'
Usage: …

③变量不包含任何内容:

 % open
 Usage: …

所以,它看起来像是③!即:但是你宣布你的变量,你就没有做到。

要测试您如何声明变量,只需使用echo代替open

% thisfile=README.md echo $thisfile

% thisfile=README.md
% echo $thisfile
README.md
% thisotherfile=README.md ; echo $thisotherfile
README.md

答案 1 :(得分:1)

如果在名为filelist的变量中有换行符分隔的文件名,那么我认为您需要执行以下操作:

echo -e $filelist | while IFS=$'\n' read f; do open "$f"; done