微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

脚本中的 grep 不起作用,但在 shell 中有效

如何解决脚本中的 grep 不起作用,但在 shell 中有效

我有这个字符串:

address 0 address-set hostname-of-a-host

还有这个 grep 命令:

file=`/bin/grep -ilr ".*$host_name.*" /path/to/some/files/*

地点:

host_name=`echo $line | cut -d ' ' -f 4-`

我想获取主机名,如果在包含它的路径文件中。

所以,这是代码

line="address 0 address-set hostname-of-a-host"
host_name=`echo $line | cut -d ' ' -f 4-`
file=`/bin/grep -ilr ".*$host_name.*" /path/to/some/files/*

这些命令在 shell 中运行没有问题。但是,脚本返回一个空的“文件”变量。我不知道为什么它们不能在脚本中工作,但可以在 shell 中工作。

这是 bash 执行的输出(对不起,我必须修改

root@cpm:/path/# line="address 0 address-set hostname"
root@cpm:/path/# host_name=`echo $line | cut -d ' ' -f 4-`
root@cpm:/path/# file=`/bin/grep -ilr ".*$host_name.*" /path/to/some/files/*
root@cpm:/path/# echo $file
/path/to/some/files/file1

解决方法

每一行的最后都有一个 \r 字符。使用 set -x 很清楚。

,

您可以使用 evaleval 接受一个字符串并将其作为命令运行,就像在 shell 命令行中输入一样。这包括所有引用和扩展处理,只要您不使用用户输入,因为如果用户输入单引号,他们可能会跳出引用并运行任意命令

使用eval的示例

host_name=`echo $line | cut -d ' ' -f 4-`
eval "$host_name"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。