4

我在服务器A上有一个 Bash 脚本,它通过命令找到登录的 SSH 用户logname,即使它rootsudo. 如果我从我的桌面 SSH 到服务器A并运行脚本,它工作正常。

但是,我在 SVN 服务器S上设置了一个提交后挂钩,它通过 SSH 连接到A并在那里运行脚本,这导致 logname 失败,并出现错误“logname: no login name”。

如果我从桌面SSH 到S ,然后从那里 SSH 到A,它可以正常工作,所以错误一定是 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

这就是我最终的结果。

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 回答
3

使用id -nu. 没有愚蠢的分叉和切割来获取用户名。

于 2012-06-15T15:02:53.490 回答