将屏幕与ssh和远程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
...

我运行了一个screen命令和一个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 '%dn' {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] $

最新更新