如何解决将屏幕与ssh和remote gawk一起使用时的语法错误
我需要在bash脚本中运行以下命令。
该命令需要在GNU屏幕内运行,这样我才能看到进度。因此,该命令必须用引号引起来,但是由于这个原因,我在语法上遇到了问题,并且代码无法正常运行。
我在名为textfile.txt
的远程服务器中有一个文件。看起来像这样。
gawk命令本身运行正常。
test-server-name 1
test-server-name 2
test-server-name 3
...
test-server-name 23
test-server-name 24
...
我同时运行屏幕命令和ssh命令,后者运行gawk命令来修改文本文件中的一行,在这种情况下,它应查找test-server-name-1
并在旁边添加0
像这样
test-server-name 1 0
test-server-name 2
test-server-name 3
...
test-server-name 23
test-server-name 24
...
这就是我的脚本在本地服务器中的样子。
localhostname='test-server-name-1'
counter=1
function='textfile'
screen -dmS $counter "ssh -i ~/.ssh/ssh-key username@masteripaddress 'gawk -i inplace -v n='0' -v s='${localhostname}-${function}' '$1 == s { $2 = n } 1' /home/master/Documents/${function}.txt';exec bash;"
但是,当我运行它时,脚本会运行,并且在所附的屏幕上会出现此错误,
gawk: cmd. line:1: ==
gawk: cmd. line:1: ^ syntax error
我该如何解决?什么字符需要转义
解决方法
(不要这样做。如果将脚本放在远程端会容易得多。)
仅举一个示例(带有[STEP 101] $ # to run an awk command locally
[STEP 102] $ title='THE SUM: '
[STEP 103] $ printf '%d\n' {1..10} | awk -v title="$title" '{ sum += $1 } END { print title sum }'
THE SUM: 55
[STEP 104] $
[STEP 105] $ # to run the awk command thru screen + ssh
[STEP 106] $ # added 'sleep 1' for easy watching
[STEP 107] $ title='THE SUM: '
[STEP 108] $ screen -c /dev/null -m ssh 127.0.0.1 printf\ \'%d\\n\'\ \{1..10\}\ \|\ awk\ -v\ title=\'"$title"\'\ \'\{\ sum\ +=\ \$1\ \}\ END\ \{\ print\ title\ sum\ \}\'\;\ sleep\ 1
THE SUM: 55
[screen is terminating]
[STEP 109] $
样式的转义):
{{1}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。