如何解决脚本中的 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 中工作。
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 很清楚。
,您可以使用 eval
,eval
接受一个字符串并将其作为命令运行,就像在 shell 命令行中输入一样。这包括所有引用和扩展处理,只要您不使用用户输入,因为如果用户输入单引号,他们可能会跳出引用并运行任意命令
使用eval
的示例
host_name=`echo $line | cut -d ' ' -f 4-`
eval "$host_name"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。