【问题标题】:BASH execute command on remote serverBASH 在远程服务器上执行命令
【发布时间】:2026-02-24 17:35:01
【问题描述】:

我想执行一个命令,返回所有存在的用户主目录并将结果存储到 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 将家庭用户存在的结果存储到变量中:(

【问题讨论】:

  • for u in $res_array 应该写成for u in "${res_array[@]}"

标签: arrays bash ssh


【解决方案1】:

这样做:

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
)

【讨论】: