【问题标题】:Syntax error when using screen with ssh and remote gawk将屏幕与 ssh 和远程 gawk 一起使用时出现语法错误
【发布时间】: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


【解决方案1】:

(不要这样做。如果您将脚本放在远程端会容易得多。)

举个例子(\-style 转义):

[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] $

【讨论】:

  • 但是本地服务器需要是远程服​​务器发生变化的原因。
猜你喜欢
  • 2016-04-06
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 2022-07-01
  • 2021-06-25
  • 2018-06-16
相关资源
最近更新 更多