"su"コマンドのエイリアス

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 "$@"
}

エイリアスはプレーンテキスト置換であるため、シェル関数のようにチェックまたは変更できるパラメータがないため、エイリアスと同様の操作を実行できません。

おすすめ記事