没有ssh主机的输出"awk'{print $ 0}'/ path/to/log.txt"

jon*_*rry 3 ssh awk

我正在尝试使用awk从远程机器上的日志中提取一些数据,并注意到如果我进入机器运行并运行

awk '{print $0}' /path/to/log.txt
Run Code Online (Sandbox Code Playgroud)

我得到了预期的输出(包含日志消息,堆栈跟踪等),但是如果我运行的话

ssh host "awk '{print $0}' /path/to/log.txt"
Run Code Online (Sandbox Code Playgroud)

然后输出如下所示:

0
1
0
0
1
1
1
1
1
1
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?

Pau*_*ce. 6

逃离美元符号.

ssh host "awk '{print \$0}' /path/to/log.txt"
Run Code Online (Sandbox Code Playgroud)

因为单引号不保护$0本地,所以它被替换,因为它被发送到远程端.

你也可以尝试:

ssh host 'awk "{print \$0}" /path/to/log.txt'
Run Code Online (Sandbox Code Playgroud)

这可以保护$0远程端,但需要对命令进行更多更改.


Gil*_*not 5

一种方法是在没有反斜杠的情况下执行此操作:

ssh domain.tld <<'EOF'
awk '{print $1}' /var/log/syslog*
EOF
Run Code Online (Sandbox Code Playgroud)

这使用here-docs:

man bash | less +/'Here Documents'
Run Code Online (Sandbox Code Playgroud)