我想使用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}"
答案 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