【发布时间】:2020-09-20 17:33:46
【问题描述】:
我需要在 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
我该如何解决?哪些字符需要转义
【问题讨论】:
-
你有嵌套单引号
-
有办法解决这个问题吗?我也对语法感到困惑
-
试试:
screen -dmS $counter "ssh -i ~/.ssh/ssh-key username@masteripaddress \"gawk -i inplace -v n='0' -v s=$localhostname '$1 == s { $2 = n } 1' /home/master/Documents/${function}.txt\";exec bash;" -
shell、screen、ssh、gawk -- 你需要处理所有这些的嵌套引用。不要这样做。在远程端放置一个 shell 脚本并通过 ssh 调用它。
-
到底为什么
exec bash?
标签: bash shell awk ssh gnu-screen