String 如何将xargs的输出连接到变量中?
在下面的代码中,在进入下一个循环之前,我需要提供变量“depend”的完整输出。另外,手动测试命令“equaly”时,我发现在许多参数之后,下一个参数将直接转储到终端上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
#!/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