我正在尝试从一个简单的 bash 脚本中提取信息,该脚本从 java 服务器中提取一些数据。当 SSH 变量在脚本中运行时,我似乎无法运行awk
它来提取我需要的信息,除非我将它写入本地文件。这是我正在使用的内容:
check=$(ssh [email protected] "/usr/local/bin/check_mq.sh")
ret=$?
cat=/bin/cat
awk=/usr/bin/awk
output=$($cat $check | $awk -F= '{print $4}' | $awk '{print $1}')
echo $output
如果我只是echo $check
在脚本中,它会像这样出现。
backchannel_queue messages=0 messages_ready=0 messages_unacknowledged=0
但是,如果我$check
用awk
命令输入脚本,它会给我这个输出:
/bin/cat: backchannel_queue: No such file or directory
/bin/cat: 'messages=0': No such file or directory
/bin/cat: 'messages_ready=0': No such file or directory
/bin/cat: 'messages_unacknowledged=0': No such file or directory
我已经能够通过写入$output
系统上的文本文件来完成这项工作:
check_output="/home/user/Documents/scratch/check_output.txt"
echo $check > $check_output
output=$($cat $check_output | $awk -F= '{print $4}' | $awk '{print $1}')
echo $output
我在想我在这里做错了什么,我不需要写入$output
文件。或者,这是这里唯一的选择吗?一旦我在变量中有这个数字,我计划使用一些IF
语句来查看它是否大于x
等。
你告诉它
cat
一个文件列表,这个列表实际上是你想要操作的东西,而不是文件。您想使用echo
而不是cat
这样做。不要将您正在使用的命令的路径存储在变量中,这是完全没有必要的。如果您在非标准路径下使用工具(您不这样做),请
$PATH
改为修改。您正在使用
cat $check
. 对此有两点需要注意:$check
将在空格上进行字段拆分,将其变成多个单词。如果它们包含文件名通配符,则它们将进行文件名通配符。结果单词将被赋予
cat
,它期望它们是文件名。这就是您的错误的来源。相反,只需通过管道直接传递
ssh
到awk
:这假设您要在最后
=
一行之后输出数字。如果要测试此数字是否大于某个变量
$x
:使用
echo
而不是cat
因为你$check
是一个变量。如下使用