コマンドに絶対パスオプションを追加する

コマンドに絶対パスオプションを追加する

シェルコマンド(「oldcommand」と呼びます)が与えられた場合、新しい「-location」オプションがあることを除いて、oldcommandと同じように動作する単純なシェルスクリプトnewcommand.shはありますか?

  newcommand -location path -nonfileoption1 x1 -fileoption2 x2 -fileoption3 x3  -nonfileoption4 x4

実行されます

 oldcommand  -nonfileoption1 x1 -fileoption2 path/x2 -fileoption3 path/x3  -nonfileoption4 x4

ベストアンサー1

最初に1つのオプションにのみ興味があれば、これはほんの数行のスクリプトにすぎません。どこからでもオプションを解析して渡すには、数行のoldcommandコードが必要で、どのオプションに値があり、どのオプションに値がないかを知る必要があります。

~のためシンプルケース、

#!/bin/sh
[ "$#" -gt 2 && "x$1" = "x-location" ] && cd $2 && shift 2 && exec oldcommand "$@"
newcommand "$@"

複雑な場合は、これを実行できるように聞こえますgetopt(移植可能ではありません)。追加資料:

OPとの議論に基づいて問題を単純化するために使用できるパターンは次のとおりです。 "--fileopt"で始まるオプションには、位置オプションの値を前に追加する必要があります。したがって(代わりに実際のエラーチェックはありません。本物パス名に含まれる特殊文字の処理:

#!/bin/sh
PREP=
if [ "$#" -gt 2 ]
then
    PREP="$2/"
    shift 2
    ARGS=
    while [ "$#" != 0 ]
    do
        case "x$1" in
        (x-fileopt*)
            ARGS="$ARGS $1 ${PREP}$2"
            shift 2
            ;;
        (*)
            ARGS="$ARGS $1"
            shift 1
        esac
    done
    oldcommand $ARGS
else
    oldcommand "$@"
fi

おすすめ記事