加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash:以编程方式获取命令的完成输出(例如,在变量中)

发布时间:2020-12-15 21:35:11 所属栏目:安全 来源:网络整理
导读:如何以编程方式完成另一个命令的完成? 假设我当前的目录有文件a1,a2和a3,那么如何让我的命令调用ls a的自动完成来获取a1 a2 a3? 这可能吗? 澄清和理由: 我之所以选择ls,是因为人们可以与之相关.这是一个人为的例子,但让我试着举例说明这个功能的价值.我
如何以编程方式完成另一个命令的完成?

假设我当前的目录有文件a1,a2和a3,那么如何让我的命令调用ls a的自动完成来获取a1 a2 a3?

这可能吗?

澄清和理由:

我之所以选择ls,是因为人们可以与之相关.这是一个人为的例子,但让我试着举例说明这个功能的价值.我有一个名为build的命令,在给定目录的情况下,它可以自动完成可以在该目录中构建的目标.这些目标可能与该目录中的文件不对应.目标可能是由我不想解析的构建文件中的build命令挖掘的.换一种说法:

构建路径/到/ dir / TABTAB

可能会给:

path/to/dir/a_target
path/to/dir/b_target

build是一个预先存在的命令,而不是我可以继续修改以适应我的目的.它提取目标的方式是我当然不想知道的.

现在假设我有一个可构建项目的完整存储库,而且我的大部分工作因此大部分构建工作只在一个项目中进行.换句话说,我总是在我的/ project /目录下构建一些目标.

到现在为止还挺好.

所以我想编写一个围绕build命令的包装器,它不需要我每次运行它时都将它提供给目录路径.我希望它知道我的首选项目目录(或目录,为什么不),让我引用目标而不限定它们:

所以假设我有:

my/project/directory/a_target
my/project/directoryb_target

我要这个:

mybuildTABTAB

给我:

a_target
b_target

当然我需要为mybuild编写完成代码,但是我希望它依赖于构建的完成,因为我不能只是去编写构建的开发人员编写构建listtargets命令只是为了让我开心.该功能已经存在,在构建完成时,我需要利用它.

(当然,当我运行mybuild a_target时,它会知道运行build my / project / directory / a_target,并且我知道如何实现并且不在这个问题的范围内.)

我希望这说明了为什么我需要完成构建命令并将其用作黑盒子.

解决方法

这有点奇怪,您需要执行的命令取决于目录中的文件数 – 无,一个或多个.但是这个命令适用于示例案例:

echo echo a$'t'$'t' | bash -i 2>&1 | head -3 | tail -1

自动完成的命令是

echo a

所以将它作为字符流,然后是两个制表符,发送到交互式bash shell中. bash在stderr上生成自动完成输出,因此将其重定向到stdout并通过head和tail管道以从整体中选择一行输出.在这种情况下,这会产生单线输出

a1  a2  a3

但是,正如其他人所说,只是使用

echo a*

可能会更容易!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读