bash
の関数に与えられた引数を、別の関数またはプログラムにどのように適切に "転送"できるのでしょうか。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
を呼び出すと、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は存在しません"というエラーが発生しますが、他の問題は解決されます。
私が欠落している引数を転送するには、いくつかの規約が必要です。
チャームのように働いて、ありがとうございました。それらの '$' varsの数だけがあります! –
実際に '$ *'は文字列の中で引数を転送する必要があるときに機能します(例えば 'mosel -s -c" exec $ * "') –