そのため、いくつかの準備作業を実行してからユーティリティを実行するシェルスクリプトがあります。
-a
準備はスイッチの影響を受けたり、スイッチを待つことができます-n
。これらのスイッチ以外のコマンドラインの内容はユーティリティに渡されます。現在私のスクリプトは次のとおりです
while getopts ":an" opt; do
case $opt in
a)
#something
;;
n)
#something else
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
shift $((OPTIND-1))
#more prep
my_utility $@
--abc
ただし、解釈されたgetoptsa
やb
オプションなどの長い形式オプションをユーティリティに渡そうとすると失敗します。c
-a
それでは、オプションの1つが-n
処理されますが、--abc
変更されない方法でオプションを処理するにはどうすればよいですか?もちろん、シェルをダンプしてPythonで実行しない限り、オプションは非常に簡単ですが、ファイルをコピーしてユーティリティを実行する必要があります。
ベストアンサー1
二重ダッシュコマンドを解釈するために組み込まれていgetopt
ますgetopts
。
組み込みのbashを使用して長いオプションをエミュレートする方法がありますが、パッチワークなので、getopts
それをしてはgetopts
いけません。実装する長い形式。
したがって、スクリプトは次のようになります。
#!/bin/bash
# Get options
OPTS=`getopt --options an: --long a_something,n_something_else: -n 'parse-options' -- "$@"`
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi
#echo parsed and cleaned up options
echo "$OPTS"
eval set -- "$OPTS"
bSomething=false
bSomethingElse=false
# "Endless" loop over the parsed options
while true; do
case "$1" in
-a | --a_something ) bSomething=true; shift ;;
-n | --n_something_else ) bSomethingElse=true; shift ;;
-- ) shift; break ;;
* ) break ;;
esac
done
より多くの情報を知りたい場合:man getopt
詳細は:man getopt(3)