SCENARIO
文件users.yml
包含多个用户名和密码。一些用户名和密码正在重复。例如......
xxxxx
username: abc
password: abcpwd
xxxxx
xxxxx
username: adam
password: adampwd
xxxxx
xxxxx
username: adam
password: adampwd
xxxxx
脚本文件script.sh
正在尝试获取users.yml
中用户名与条件匹配的所有行号。
username='adam'
filepath='/etc/myServer/users.yml'
#Gets the line number for the username
userNameLineNumbers=`awk -v line='^.*username: '$username'' '$0~line {print NR}' $filepath`
echo "username line number: "$userNameLineNumbers #output: username line number: 6 10
如果我在users.yml
所在的同一台机器上运行脚本,那么此脚本工作正常。但问题是......
问题
如果我将脚本保存在另一台服务器上并尝试远程获取文件中的行号,则该脚本不起作用。
我尝试了几种使用ssh
获取行号的方法,但无法执行此操作。我不是bash脚本的专家,但仍然以不同的方式尝试以下命令,每次它给出一些奇怪的结果,而不是给我文件中的行号。
script="sudo awk -v line='^.*username: '$username'' '$0~line {print NR}' $filepath"
userNameLineNumbers=$(ssh -o "StrictHostKeyChecking no" -tty -i "$PEM_FILE" "user@remotehost.xyz" $script )
渴望输出
寻找一种解决方案,将行号作为数组从awk
符合条件的远程服务器上的文件中获取。
答案 0 :(得分:0)
我能想到的两个变化:
使用eval
在$script
变量
在$
中退出$0
。否则它会扩展为$0
的值,这会给出用于调用当前shell的命令(例如-bash
)
script="sudo awk -v line='^.*username: '$username'' '\$0~line {print NR}' $filepath"
userNameLineNumbers=$(ssh -o "StrictHostKeyChecking no" -tty -i "$PEM_FILE" "user@remotehost.xyz" eval $script )