2012-04-20 13 views
6

bashの関数に与えられた引数を、別の関数またはプログラムにどのように適切に "転送"できるのでしょうか。bashの関数引数を適切に "転送"する方法はありますか?

例えばMac OS Xの場合、指定されたファイルをデフォルトアプリケーションで開くコマンドラインプログラムopenman 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を呼び出すと、XcodeではなくTextMateでファイルを開こうとすると、「 '/Applications/TextMate.app myheader.h'という名前のアプリケーションを見つけることができません」というエラーが発生します。 "$*"から/usr/bin/openになると、私の引数リスト全体がただ1つの引数として転送されているようです。

usr/bin/open $*(引用符なし)を使用するように機能を変更すると、パスにスペースが含まれていると問題が発生します。 open other\ header.hを呼び出すと、 "ファイル/ Users/inspector-g/otherおよび/Users/inspector-g/header.hは存在しません"というエラーが発生しますが、他の問題は解決されます。

私が欠落している引数を転送するには、いくつかの規約が必要です。

答えて

9

あなたは実際にこのケース用に設計された"[email protected]"が欠けています。

+0

チャームのように働いて、ありがとうございました。それらの '$' varsの数だけがあります! –

+0

実際に '$ *'は文字列の中で引数を転送する必要があるときに機能します(例えば 'mosel -s -c" exec $ * "') –

関連する問題