の関数に与えられた引数bash
を別の関数またはプログラムに適切に「転送」するにはどうすればよいのでしょうか。
たとえば、Mac OS Xには、指定されたファイルをデフォルトのアプリケーションで開くコマンドラインプログラムopen
(マニュアルページ)があります(つまり、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.appmyheader.h'という名前のアプリケーションが見つかりません」というエラーが発生します。に渡す"$*"
と/usr/bin/open
、引数リスト全体が1つの引数として転送されるようになります。
関数を使用するだけusr/bin/open $*
(引用符なし)に変更すると、スペースのあるパスで問題が発生します。次に呼び出すopen other\ header.h
と、「ファイル/Users/inspector-g/otherおよび/Users/inspector-g/header.hは存在しません」というエラーが発生しますが、他の問題は解決します。
私が見逃している引数を転送するためのいくつかの規則があるに違いありません。