2

既存の Bash コマンドにオプションを追加することはできますか?

たとえば、特定のコマンド (cp、mkdir、rm...) に -foo を渡すときにシェル スクリプトを実行したいと考えています。

4

2 に答える 2

5

cp特別な引数をチェックする特別なスクリプトを呼び出すeg のエイリアスを作成し、次に特別なスクリプトを呼び出すことができます。

$ alias cp="my-command-script cp $*"

そして、スクリプトは次のようになります

#!/bin/sh

# Get the actual command to be called
command="$1"
shift

# To save the real arguments
arguments=""

# Check for "-foo"
for arg in $*
do
    case $arg in
    -foo)
        # TODO: Call your "foo" script"
        ;;
    *)
        arguments="$arguments $arg"
        ;;
esac
done

# Now call the actual command
$command $arguments
于 2012-11-01T10:20:26.740 に答える
0

一部のプログラマーのコードはクールで魅力的に見えるかもしれません...しかし、ほとんどのコマンドでは非常に慎重に使用する必要があります

$* と $@ の使用法について:

スペースやワイルドカードを含む引数があるとすぐに予期せず破損する可能性があるため、これらのいずれも使用しないでください。

これが私の bash コードが動作しないことがある理由であることに気付くまで、少なくとも数か月は自分でこれを使用していました。

はるかに信頼性が高くなりますが、簡単ではなく、移植性の低いオプションを検討してください。コメントで指摘されているように、元のコマンドを変更して再コンパイルします。つまり、次のとおりです。

いくつかの尊敬されている開発者リポジトリから c/c++ ソース コードをダウンロードします。

c/c++ でコードを追加し、gcc/g++ でコンパイルします。

また、bash自体を編集して、コマンドとして bash に渡された文字列が何らかのパターンに一致するかどうかを確認するように設定することもできます。これを実行しないで、別のコマンドまたは bash スクリプトを実行してください。

シェルをカスタマイズして機能を追加するというこのアイデアに本当に興味がある場合は、おそらくzshfishなどの他のクールでファッショナブルなシェルをチェックしてください。

于 2020-01-15T22:10:37.017 に答える