4

のように実行された場合でも、コマンドを介してログインしている SSH ユーザーを見つけるサーバーAに Bash スクリプトがあります。デスクトップからサーバーAに SSH 接続してスクリプトを実行すると、正常に動作します。lognamerootsudo

ただし、 SSH でAに接続し、そこでスクリプトを実行するSVN サーバーSにポストコミット フックを設定しました。

デスクトップからSに SSHで接続し、そこからAに SSHで接続すると、正しく動作するため、エラーは SVN フックが最終的に仮想端末から実行されないという事実にあるはずです。

lognameここで使用できる代替手段は何ですか?

4

3 に答える 3

3

id次のコマンドを使用できます。

  $ ssh 192.168.0.227 logname
  logname: no login name

でも

  $ ssh 192.168.0.227 id
  uid=502(username) gid=100(users) groups=100(users)

bashスクリプトでは、次のようなID出力からユーザー名を切り取ることができます。

  $ id | cut -d "(" -f 2 | cut -d ")" -f1
  username

sudo環境とターミナルなしの両方で機能するスクリプトを作成するには、常に条件付きでさまざまなコマンドを実行できます。

if logname &> /dev/null ; then 
    NAME=$( logname )
else 
    NAME=$( id | cut -d "(" -f 2 | cut -d ")" -f1 )
fi
echo $NAME
于 2012-06-15T14:03:38.403 に答える
3

を使用しid -nuます。ユーザー名を取得するためのばかげたフォークやカットはありません。

于 2012-06-15T15:02:53.490 に答える
3

これが私が最終的に得たものです。

if logname &> /dev/null; then
    human_user=$(logname)
else
    if [ -n "$SUDO_USER" ]; then
        human_user=$SUDO_USER
    else
        human_user=$(whoami)
    fi
fi
于 2012-06-15T14:43:44.437 に答える