Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 并非所有grep输出行都返回_Bash_Shell_Docker - Fatal编程技术网

Bash 并非所有grep输出行都返回

Bash 并非所有grep输出行都返回,bash,shell,docker,Bash,Shell,Docker,我正在编写一个shell脚本来与本地Docker repo进行交互,并发现我从bash脚本得到的结果与我预期的不同。首先,使用以下命令行: des@dev: docker images | grep gateway 我得到: test-gateway 4.27.0-1.5.2-301 b215d109c627 8 days ago 1.977 GB test-gateway dev b215d109c627

我正在编写一个shell脚本来与本地Docker repo进行交互,并发现我从bash脚本得到的结果与我预期的不同。首先,使用以下命令行:

des@dev: docker images | grep gateway
我得到:

test-gateway     4.27.0-1.5.2-301    b215d109c627        8 days ago           1.977 GB
test-gateway     dev                 b215d109c627        8 days ago           1.977 GB
test-gateway     staging             b215d109c627        8 days ago           1.977 GB
test-gateway     4.26.2-1.5.2-298    7376dd26db6e        2 weeks ago          2.117 GB
test-gateway     4.26.2-1.5.2-297    c84e6de5a18e        2 weeks ago          2.117 GB
test-gateway     4.26.0-1.5.2-296    e6a772c0e230        2 weeks ago          2.048 GB
test-gateway     4.24.3-1.5.2-295    d3743f5246f4        3 weeks ago          1.978 GB
test-gateway     prod                d3743f5246f4        3 weeks ago          1.978 GB
test-gateway     4.24.1-1.5.2-294    99065a070172        5 weeks ago          1.908 GB
test-gateway     4.24.1-1.5.2-293    90639b86573a        5 weeks ago          1.908 GB
test-gateway     4.24.1-1.5.2-292    223f8c3a41cf        5 weeks ago          1.908 GB
test-gateway     4.24.0-1.5.2-291    5646792848cf        6 weeks ago          1.873 GB
test-gateway     4.24.0-1.5.2-290    8a4e92f6a7b9        6 weeks ago          1.847 GB
test-gateway     4.24.0-1.5.2-289    475e72c8691e        6 weeks ago          1.847 GB
test-gateway     4.23.8-1.5.2-288    1c83a9f9ccc4        7 weeks ago          1.812 GB
test-gateway     4.23.8-1.5.2-287    5e77c056c703        7 weeks ago          1.812 GB
test-gateway     4.23.7-1.5.2-286    b9d9f95ec17d        7 weeks ago          1.812 GB
test-gateway     4.23.6-1.5.2-282    f40fe68c0183        8 weeks ago          1.997 GB
运行以下脚本:

#!/bin/bash
docker images | grep gateway | while read line; do
    read line
    echo "$line"
done;
返回:

test-gateway     staging             b215d109c627        8 days ago           1.977 GB
test-gateway     4.26.2-1.5.2-298    7376dd26db6e        2 weeks ago          2.117 GB
test-gateway     4.26.0-1.5.2-296    e6a772c0e230        2 weeks ago          2.048 GB
test-gateway     prod                d3743f5246f4        3 weeks ago          1.978 GB
test-gateway     4.24.1-1.5.2-293    90639b86573a        5 weeks ago          1.908 GB
test-gateway     4.24.0-1.5.2-291    5646792848cf        6 weeks ago          1.873 GB
test-gateway     4.24.0-1.5.2-289    475e72c8691e        6 weeks ago          1.847 GB
test-gateway     4.23.8-1.5.2-287    5e77c056c703        7 weeks ago          1.812 GB
test-gateway     4.23.6-1.5.2-282    f40fe68c0183        8 weeks ago          1.997 GB
为什么bash脚本不返回所有匹配的行


注意:仅查看输出,我发现脚本似乎以某种方式删除了图像大小相同的行,这使得这一点更加奇怪,因为脚本中没有任何限制输出的内容。

您有一个额外的
read line
调用,它使您在解析脚本时跳过结果的每一行需要删除的输出

通过使用
read
命令和while循环引入简单语法,还可以删除额外的子shell处理层。该语法基本上允许您从命令输出中读取,就像从文件中读取一样

while IFS= read -r line; do
    printf '%s\n' "$line"
done< <(docker images | grep gateway)
而IFS=read-r行;做
printf'%s\n'$行

完成<您有一个额外的
读取行
调用,它使您在解析输出时跳过结果的每一行,这需要删除

通过使用
read
命令和while循环引入简单语法,还可以删除额外的子shell处理层。该语法基本上允许您从命令输出中读取,就像从文件中读取一样

while IFS= read -r line; do
    printf '%s\n' "$line"
done< <(docker images | grep gateway)
而IFS=read-r行;做
printf'%s\n'$行

做得好。<聪明地拍了拍额头!谢谢@Inian-我真的错过了@杰布兰查德:这是经常发生的;)狠狠地打额头!谢谢@Inian-我真的错过了@杰布兰查德:这是经常发生的;)与问题无关,只需注意,有时最好在阅读时编写:
。。。done<与问题无关,只需注意,有时最好在阅读时编写:
。。。完成<