0

.sh ファイルを使用して Pathogen ヘルパー スクリプトを作成したいと考えています。実行可能にすればコマンドとして実行できることは知っていますが、その方法やそのようなことはわかりませ-o --optionsarguments

基本的にそれが私が答えたいことです。本当に私が知る必要があるのは、次のようなことをする方法だけです:

pathogen install git://...

または、それらの線に沿った何か。どんな助けでも大歓迎です。:)

4

2 に答える 2

1

私の知る限り、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のコード例と説明をご覧ください。

于 2013-09-20T20:53:32.403 に答える
1

引数を渡すのは 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
    • getoptswhile-反復できるものを返します
    • :vs:- 最初の引数。これは、シェル行を解析する際にスイッチgetoptsが何を探す かを記述します
      • :- 最初のコロンはデバッグ モードを終了します。冗長getoptsにするためにこれを省略しますgetopts
      • v- switch-vを見つけます。これにはその後に引数はありません。単純な switch です。
      • s:--sその後に引数があるオプションを見つけます
    • OPT- 使用された文字 (スイッチの名前) を保存します (例: "v" または "s")。
  • OPTARGwhile- の各反復中に値をロードする変数。forv$OPTARGは値がありませんが、 forsには値があります。

コロン:は getopts に切り替え後の引数を探すように指示します。唯一の例外は、文字列が で始まる場合で:getoptsデバッグ/詳細モードのオン/オフを切り替えます。例えば:

getopts :q:r:stu:vgetopts をデバッグ モードから外し、 スイッチqr、およびuが引数を期待することを通知しますが、 s、 、tおよびは期待しuません。これは、次のようなものに適用できます。stuff -q hello -r world -s -t -u 123 -v

getopts tuvgetopts に switch を検索するように指示するだけで、引数なし (例: )および冗長になるようにt指示します。uvstuff -t -u -v

于 2013-09-20T20:54:08.223 に答える