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
String 如何将xargs的输出连接到变量中?_String_Shell_Output_Gentoo - Fatal编程技术网

String 如何将xargs的输出连接到变量中?

String 如何将xargs的输出连接到变量中?,string,shell,output,gentoo,String,Shell,Output,Gentoo,在下面的代码中,在进入下一个循环之前,我需要提供变量“depend”的完整输出。另外,手动测试命令“equaly”时,我发现在许多参数之后,下一个参数将直接转储到终端上 #!/bin/bash depend=$(equery depends "$@" | awk '{gsub("./*"," ",$1); gsub("-[0-9].*," ",$1); print $1}') until new="" depend=$(echo $depend | xargs -n1 | s

在下面的代码中,在进入下一个循环之前,我需要提供变量“depend”的完整输出。另外,手动测试命令“equaly”时,我发现在许多参数之后,下一个参数将直接转储到终端上

#!/bin/bash

depend=$(equery depends "$@" | awk '{gsub("./*"," ",$1); gsub("-[0-9].*," ",$1); print $1}')

until
    new=""
    depend=$(echo $depend | xargs -n1 | sort -u | xargs)
    echo $depend
    new=$(equery depends `echo $depend` | xargs -n50 | awk '{gsub("./*"," ",$1); gsub("-[0-9].*," ",$1); print $1}')
    depend=$new
    [ -z $depend ]
do :; done

您正在寻找包的反向依赖,包括直接依赖和间接依赖,这使得您可以使用递归。
equaly
命令提供了一个查找间接依赖项的选项:
-D
-indirect
。还有一个选项应该同时使用,因为许多包都在依赖循环中!(我是在编写脚本时发现的)这让我觉得包管理器必须非常聪明才能避开这些循环

例如,VLC的反向依赖关系树如下所示:

$ equery --quiet depends --indirect vlc
media-libs/phonon-vlc-0.11.1
 media-libs/phonon-4.11.1-r1
  kde-apps/kio-extras-19.12.2
   kde-plasma/plasma-workspace-5.17.5-r1
    virtual/notification-daemon-0
     x11-libs/libnotify-0.7.8
      media-video/vlc-3.0.8
(Many other reverse dependencies removed)
从包名称中删除类别不是一个好主意,因为在不同的类别中存在同名的包,即使排除特殊类别(
virtual
acct user
acct group
):

您可以通过以下命令找到它们:

cd /var/db/repos/gentoo/;ls -1d */*|grep -v "^acct-"|grep -v virtual|cut -d '/' -f2|sort|uniq -c|sort -n|tail -n50
回到你的脚本,我已经做了修改,使它工作。最重要的是在
调用或变量名周围放置
,以便在必要时保留行分隔符。我相信如果包处于依赖项循环中,此脚本不会终止

#!/bin/bash

depend="$(echo "$@" | xargs -n1 equery depends | awk '{gsub("-[0-9].*","",$1); print $1}')"

until
    depend="$(echo "$depend" | sort -u)"
    test="$depend"
    echo Reverse dependencies
    echo "$depend"
    new="$(echo $depend | xargs -n1 equery depends | awk '{gsub("-[0-9].*","",$1); print $1}')"
    depend="$new"
    [ -z "$test" ]
do :; done
“`echo$depend`”-只需
“$depend”
#!/bin/bash

depend="$(echo "$@" | xargs -n1 equery depends | awk '{gsub("-[0-9].*","",$1); print $1}')"

until
    depend="$(echo "$depend" | sort -u)"
    test="$depend"
    echo Reverse dependencies
    echo "$depend"
    new="$(echo $depend | xargs -n1 equery depends | awk '{gsub("-[0-9].*","",$1); print $1}')"
    depend="$new"
    [ -z "$test" ]
do :; done