.sh ファイルを使用して Pathogen ヘルパー スクリプトを作成したいと考えています。実行可能にすればコマンドとして実行できることは知っていますが、その方法やそのようなことはわかりませ-o --options
んarguments
。
基本的にそれが私が答えたいことです。本当に私が知る必要があるのは、次のようなことをする方法だけです:
pathogen install git://...
または、それらの線に沿った何か。どんな助けでも大歓迎です。:)
私の知る限り、bash 組み込みのgetoptsは長い引数の解析メカニズムを処理しません。
getopt(1)は、探しているツールです。
完全にプログラムではありませんが、アイデアは得られます
PARSED_OPTIONS=$(getopt -n "$0" -o h123: --long "help,one,two,three:" -- "$@")
while true;
do
case "$1" in
-h|--help)
echo "usage $0 -h -1 -2 -3 or $0 --help --one --two --three"
shift;;
-1|--one)
echo "One"
shift;;
--)
shift
break;;
esac
done
hereのコード例と説明をご覧ください。
引数を渡すのは 2 つの方法の中で最も簡単です ( SOの「特別なドル記号シェル変数とは? 」を参照してください):
#!/bin/sh
echo "$#"; # total number of arguments
echo "$0"; # name of the shell script
echo "$1"; # first argument
ファイルの名前が「stuff」(拡張子なし)で、実行結果が次のようになっていると仮定します./stuff hello world
。
3
stuff
hello
1 文字のスイッチ (オプションの関連付けられたパラメーターを使用) を渡すには、たとえば、./stuff -v -s hello
を使用する必要がありますgetopts
。SO の「getopts の使い方」とこの素晴らしいチュートリアルを参照してください。次に例を示します。
#!/bin/sh
verbose=1
string=
while getopts ":vs:" OPT; do
case "$OPT" in
v) verbose=0;;
s) string="$OPTARG";;
esac;
done;
if verbose; then
echo "verbose is on";
fi;
echo "$string";
getopts
結合された行には、while
さらに説明が必要です。
while
- while ループを開始し、getopts
処理後にすべてを返しますgetopts :vs: OPT;
getopts
- 2 つの引数を持つプログラム:vs:
とOPT
getopts
while
-反復できるものを返します:vs:
- 最初の引数。これは、シェル行を解析する際にスイッチgetopts
が何を探す
かを記述します:
- 最初のコロンはデバッグ モードを終了します。冗長getopts
にするためにこれを省略しますgetopts
v
- switch-v
を見つけます。これにはその後に引数はありません。単純な switch です。s:
--s
その後に引数があるオプションを見つけますOPT
- 使用された文字 (スイッチの名前) を保存します (例: "v" または "s")。OPTARG
while
- の各反復中に値をロードする変数。forv
に$OPTARG
は値がありませんが、 fors
には値があります。コロン:
は getopts に切り替え後の引数を探すように指示します。唯一の例外は、文字列が で始まる場合で:
、getopts
デバッグ/詳細モードのオン/オフを切り替えます。例えば:
getopts :q:r:stu:v
getopts をデバッグ モードから外し、 スイッチq
、r
、およびu
が引数を期待することを通知しますが、 s
、 、t
およびは期待しu
ません。これは、次のようなものに適用できます。stuff -q hello -r world -s -t -u 123 -v
getopts tuv
getopts に switch を検索するように指示するだけで、引数なし (例: )および冗長になるようにt
指示します。u
v
stuff -t -u -v