Bash脚本执行ssh命令后出现‘command not found’错误原因排查
Bash脚本执行ssh后出现"command not found"错误
我正在使用GNU bash 4.4.11(1)-release(sparc-sun-solaris2.11)编写脚本,脚本遍历主机文件./FILES/Solaris_Full_Inventory_Dec_2022.txt中的主机,通过ssh执行/usr/bin/id命令检查指定用户。脚本功能可正常运行,但执行后会出现“command not found”错误,开启set -x后的执行日志如下:
# set -o pipefail HOSTS=./FILES/Solaris_Full_Inventory_Dec_2022.txt + HOSTS=./FILES/Solaris_Full_Inventory_Dec_2022.txt cmd0="/usr/bin/id" + cmd0=/usr/bin/id usernames=$(cat <<EOF sac_haeaadmin sac_botadmin sac_appadmin EOF ) sac_haeaadmin sac_botadmin sac_appadmin EOF ++ cat + usernames='sac_haeaadmin sac_botadmin sac_appadmin' while read line; do [ "${line:0:1}" = "#" ] && continue echo $line; for x in ${usernames}; do $(ssh -qntT -o StrictHostKeyChecking=no $line "${cmd0} $x"); done done<$HOSTS + read line + '[' C = '#' ']' + echo hostname1 hostname1 + for x in ${usernames} ++ ssh -qntT -o StrictHostKeyChecking=no hostname1 '/usr/bin/id sac_haeaadmin' + 'uid=10201(sac_haeaadmin)' 'gid=1005(sugrp)' ./checkfor_username_solaris.sh: line 21: uid=10201(sac_haeaadmin): **command not found** + for x in ${usernames} ++ ssh -qntT -o StrictHostKeyChecking=no hostname2 '/usr/bin/id sac_botadmin' + 'uid=10202(sac_botadmin)' 'gid=20001(ibm)' ./checkfor_username_solaris.sh: line 21: uid=10202(sac_botadmin): command not found + for x in ${usernames} ++ ssh -qntT -o StrictHostKeyChecking=no hostname3 '/usr/bin/id sac_appadmin' + 'uid=10203(sac_appadmin)' 'gid=20002(appuser)' ./checkfor_username_solaris.sh: line 21: uid=10203(sac_appadmin): command not found
我是Bash新手,希望有人能解答该错误的产生原因,谢谢!
错误原因
你用的$(ssh -qntT ...)是命令替换语法,Bash会先执行括号里的ssh命令,把输出结果当作新的命令去执行。而ssh返回的uid=xxx(xxx) gid=xxx(xxx)是普通字符串,不是合法的Bash命令,所以触发了"command not found"错误。
解决方法
- 如果只是想让ssh的输出直接打印到终端,去掉
$(...)直接执行ssh即可:
ssh -qntT -o StrictHostKeyChecking=no "$line" "${cmd0} $x"
- 如果需要捕获输出做后续处理,把结果赋值给变量:
result=$(ssh -qntT -o StrictHostKeyChecking=no "$line" "${cmd0} $x") # 后续可对$result做处理,比如打印或判断 echo "$result"
另外建议给变量加上双引号(如"$line"、"${usernames}"),避免空格或特殊字符导致意外问题。
内容的提问来源于stack exchange,提问作者user2766895
相关产品推荐
相关产品推荐

