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

时间:2021-07-29 09:12:36

标签: bash shell scripting grep

我有这个字符串:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

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

使用eval的示例

host_name=`echo $line | cut -d ' ' -f 4-`
eval "$host_name"
相关问题