bashシェル、Debian拡張
見たようにここ、そうです。数コマンド(実際には何の問題も見つかりませんでした...)。私の中に入れた/etc/bash.bashrc文書。
function su() { if [[ $1 == "--" ]]; then command su "$@"; else command su -l "$@"; fi; }
しかし、いくつかの改善が必要かもしれないことを知っています。
(この関数を使って達成したいことは非常に簡単です:一般的なエイリアスが利用可能な場合は
alias su='su -l
そしてalias 'su --'=su
しかし、エイリアス名にはスペースを含めることはできず、ロジックがやや循環しているように見えました...)
私のシェル機能に隠されたトラップがありますか?別のオプション(たとえば、「su -c」)を使用して呼び出すと、「su」操作は悪影響を受けますか?
答え1
実行する必要がある最初の引数su
で呼び出す場合、それ以外の場合は次のものを呼び出す必要があります。--
su "$@"
su -l "$@"
su () {
if [ "$1" = -- ]; then
command su "$@"
else
command su -l "$@"
fi
}
これがあなたの機能が現在行っている作業のようで、私の考えにはここに何の問題もないと思います。唯一の違いは、移植可能なPOSIX構文を使用して作成したことです。唯一の潜在的な問題は、su
使用したい場合です。その他たとえば、(環境を消去して現在の作業ディレクトリを変更するので、それはまったく望むものではないかもしれません)su -c ...
に変換されます。このような状況su -l -c ...
で使用されます。command su
上記の関数の元の機能を維持しながら、ここで可能な唯一の修正は呼び出しの数を減らすことですsu
。呼び出す前にパラメータリストを変更してください。-l
最初のパラメーターが最初のパラメーターではない場合、パラメーター・リスト--
の前に以下が追加されます。
su () {
[ "$1" != -- ] && set -- -l "$@"
command su "$@"
}
エイリアスはプレーンテキスト置換であるため、シェル関数のようにチェックまたは変更できるパラメータがないため、エイリアスと同様の操作を実行できません。