エイリアスが引数として渡されたときのエイリアス拡張の防止

エイリアスが引数として渡されたときのエイリアス拡張の防止

2つの別名があります。

alias rm='python my/rm/script.py '
alias docker='sudo docker '

問題は、ステートメントを実行すると$ docker rm ARGSキーワードがrmエイリアスに拡張され、dockerが文句を言うことです。'python' is not a docker command.

いくつかの解決策を見つけました。 1つの解決策はキーワードを使用することですcommand。もう一つは、shoptエイリアス拡張を切り替えることです。私はそれらを最大限に活用できませんでした。

次のいずれも私には適していません。

alias docker='shopt -u expand_aliases; sudo docker '
alias docker='command sudo docker '

Unaliasの仕組み:

alias docker='unalias rm; sudo docker '

unaliasの問題は、dockerコマンドが実行されているかどうかにかかわらず、しばらくして実行中のシェル環境にrmエイリアスがもう存在しないことを忘れてしまうことです。したがって、rmファイルに使用するとすぐに削除され、Pythonスクリプトはセーフティネットとして機能し、削除するファイルをごみ箱に移動します。私は誤ってrmエイリアスの代わりにGNU rmコマンドを使用するような状況を避けたいと思います。これがまさにunaliasを使いたくない理由です。

別の解決策は、ドッカーエイリアスを放棄することです。欠点は、sudo実行したいすべての有用なdockerコマンドに対してキーワードを作成する必要があることです。それは不安なので、ドッカーエイリアスを使用しません。

別の解決策は、次のようにrmキーワードをエスケープすることです。

docker \rm ARGS

これはうまくいきます。しかし、ここに「設定して忘れてしまう」ソリューションがあるので、他のことを心配することなく、自然にdockerコマンドを実行できることを願っています。

rm上記の制限を考慮して、rmとdockerでエイリアスを使用しながら、キーワードがdockerコマンドからエイリアスに拡張されないようにするにはどうすればよいですか?

答え1

rmエイリアスを使用した後に使用するとエイリアスが拡張されるのは、dockerエイリアス定義のdocker末尾にスペースが含まれているためです。エイリアス定義の最後にスペースを追加するこれ次の単語にエイリアス拡張を適用するようにシェルに要求する方法。

解決策:dockerエイリアスを定義するときは、最後にスペースを追加しないでください。別のエイリアスの末尾にあるスペースを削除することもできます。

dockerユーザーをグループに追加してエイリアスを完全に削除することもできますが、dockerこれはローカルで行われる管理上の決定です。

関連情報