首页 > 解决方案 > BASH 在远程服务器上执行命令

问题描述

我想执行一个命令,该命令返回所有存在的用户主目录并将结果存储到 bash 变量中

res=$(ssh -q -o LogLevel=error user@server << 'EOF' 
t=$(awk -F':' '{ if ( $3 >= 500 ) print $1 }' /etc/passwd)
readarray -t res_array <<< "${t}"
UHOME="/home"
for u in "$res_array"
do
  _dir="${UHOME}"/"${u}"
  if [[ -d "$_dir" ]]
then
    echo "$u"
  fi
done
EOF
)

在本地代码有效但不在远程服务器上我使用 echo $u 将结果存储在家庭用户存在到变量中:(

标签: arraysbashssh

解决方案


做这个:

res=$(ssh -q -o LogLevel=error user@server << 'EOF' 
t=$(awk -F':' '{ if ( $3 >= 500 ) print $1 }' /etc/passwd)
readarray -t res_array <<< "${t}"
UHOME="/home"
for u in "${res_array[@]}" # change this line
do
  _dir="${UHOME}"/"${u}"
  if [[ -d "$_dir" ]]
then
    echo "$u"
  fi
done
EOF
)

推荐阅读