我一直在尝试创建一个 Bash 脚本函数,可用于在 Atom (文本编辑器)中搜索并打开带有所需字符串的 ebuild。这是我当前的 Bash 脚本函数(存储在~/.bashrc
)
function edsch {
L=$(grep --include "*.ebuild" -R "$1" /usr/portage/$2)
for i in ${L[@]}
do
atom $i
done
}
我想用来在其中edsch .src.rpm x11-themes
搜索类别中的 ebuild ,然后使用 Atom 打开结果。问题是它的内容引用了 ebuild 中字符串(例如)出现的位置,以及 ebuild 在我的文件系统上的位置(我想在循环中传递给它)。即在这个例子中有内容:x11-themes
.src.rpm
${L}
.src.rpm
atom
for
${L}
/usr/portage/x11-themes/redhat-artwork/redhat-artwork-5.0.8-r4.ebuild:SRC_URI="mirror://gentoo/${P}-${MY_R}.fc7.src.rpm"
/usr/portage/x11-themes/lovelock-backgrounds/lovelock-backgrounds-14.91.1.1.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/laughlin-backgrounds/laughlin-backgrounds-14.1.0.3.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/solar-backgrounds/solar-backgrounds-0.92.0.5.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/goddard-backgrounds/goddard-backgrounds-13.0.0.3.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/leonidas-backgrounds/leonidas-backgrounds-11.0.0.2.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/verne-backgrounds/verne-backgrounds-15.91.0.1.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/constantine-backgrounds/constantine-backgrounds-12.1.1.4.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
每行的第一部分指的是 ebuild 在我的系统上的位置(例如,/usr/portage/x11-themes/constantine-backgrounds/constantine-backgrounds-12.1.1.4.ebuild
在最后一行),而第二部分(例如,SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm
在最后一行)指的是字符串.src.rpm
出现的行。有没有办法可以更改grep
输出,以便仅显示文件系统上的 ebuild 位置?
答案1
您可以grep
使用以下选项仅输出与搜索参数匹配的文件的文件名-l
:
function edsch {
L=$(grep -l --include "*.ebuild" -R "$1" /usr/portage/$2)
for i in ${L[@]}
do
atom $i
done
}
这将生成您正在查找的输出并使用 Atom 打开相应的文件。