【发布时间】:2012-05-01 14:46:33
【问题描述】:
我想知道如何将bash 中的函数参数正确“转发”到另一个函数或程序。
例如,在 Mac OS X 中,有一个命令行程序 open (man page) 将使用其默认应用程序打开指定文件(即,它将在 Xcode 中打开 *.h 文件或文件夹在 Finder 等中)。我想简单地调用 open 不带参数来打开 Finder 中的当前工作目录,或者为其提供典型参数以正常使用它。
我想,“我将只使用一个函数!”哈,我想那里没那么快。这是我所拥有的:
function open
{
if [ $# -eq 0 ]; then
/usr/bin/open .
else
/usr/bin/open "$*"
fi
}
只需调用open 即可,它会在 Finder 中打开工作目录。调用 open myheader.h 效果很好,它会在 Xcode 中打开“myheader.h”。
但是,调用 open -a /Applications/TextMate.app myheader.h 尝试在 TextMate 中打开文件而不是在 Xcode 中会导致错误“找不到名为 '/Applications/TextMate.app myheader.h' 的应用程序”。似乎将"$*" 传递给/usr/bin/open 导致我的整个参数列表仅作为一个参数转发。
将函数更改为仅使用 usr/bin/open $*(无引号)会导致路径中出现空格问题。调用 open other\ header.h 会导致错误“文件 /Users/inspector-g/other 和 /Users/inspector-g/header.h 不存在”,但可以解决其他问题。
必须有一些约定来转发我刚刚错过的参数。
【问题讨论】:
标签: bash function shell arguments