捕获内置bash的多行输出

亚历克斯·B

通常,bash可以分配命令的多行输出:

L=`ls`

这适用于交互式外壳程序和脚本。但是似乎内置变量的输出无法捕获到变量中:

L=`dirs -l -p`

这在交互式外壳中有效,但是在脚本中,只有第一行以变量结尾,这可能是由于bash对内建函数的不同处理。

为什么会发生这种情况,我该怎么做呢?

微软

您的提问方式似乎有些含糊。你说:

但是在脚本中,只有第一行以变量结尾

然后您的注释表明您正在编写Shell函数-而不是脚本。

我怀疑您知道脚本对于更改目录是无用的,因为cd脚本中的任何内容都不会传播到高级Shell。如果确实要在脚本中开发目录更改器,那么您将很难过,因为目录堆栈不会被从属shell继承:

$ dirs -l
/home/msw /home/msw/Ubuntu One /home/msw /usr/bin /usr/local /bin /usr/local
$ cat > dirs.sh
dirs -l 
$ bash dirs.sh
/home/msw

您可以使用一个函数来帮助您:

$ function passdirs() { bash ndirs.sh `dirs -l -p`; }
$ cat > ndirs.sh
echo $#
echo "$@"
$ passdirs
8
/home/msw /usr/local /usr/bin /bin /usr/local /usr/bin /bin /home/msw

但是,当然,您还需要该函数cd在当前shell中生效,在这种情况下,通过命令行进行包装和展开参数是一个引号,因此最好在该函数中完成所有操作

$ function cd_pattern() {
   cd $(dirs -l -p | grep --max-count=1 -e "$1") ; dirs
}
$ dirs
~ /usr/local /bin /usr/share/doc/evince ~/Ubuntu One
$ cd_pattern v..c
/usr/share/doc/evince /usr/local /bin /usr/share/doc/evince ~/Ubuntu One

后者也改用$(...)反引号作为同义词,以减少报价混乱。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

捕获多行ssh命令的输出

来自分类Dev

解析Bash内置时间的输出

来自分类Dev

将多行输出捕获为bash中的数组不起作用

来自分类Dev

使用 busybox sh 将多行输出捕获到 Bash 变量中

来自分类Dev

Bash递归捕获命令输出

来自分类Dev

输出多行bash变量以卷曲json

来自分类Dev

带输入的 Bash 多行命令 | 输出

来自分类Dev

从一个多行输出Bash缩放多行

来自分类Dev

Bash:捕获在后台运行的命令的输出

来自分类Dev

Bash捕获正在运行的脚本的输出

来自分类Dev

无法捕获粘贴bash命令的输出

来自分类Dev

在bash中捕获多个并行的grep输出

来自分类Dev

在内置的bash时间输出之前放置任意内容

来自分类Dev

在内置的bash时间输出之前放置任意内容

来自分类Dev

带有空格的Bash多行输出,作为数组变量

来自分类Dev

如何停止在BASH脚本中串联命令替换的多行输出?

来自分类Dev

如何为bash脚本测试命令的多行输出的字段?

来自分类Dev

如何从BASH中的变量打印多行到HTML输出

来自分类Dev

如何为bash脚本测试命令的多行输出的字段?

来自分类Dev

将fdisk bash命令输出到多行变量

来自分类Dev

鱼壳:使用管道将多行输出捕获为变量或读取

来自分类Dev

无法将输出捕获到Bash中的变量中

来自分类Dev

在BASH / SHELL中捕获输出和退出代码

来自分类Dev

Ruby从bash脚本执行中捕获stderr输出

来自分类Dev

在Shell脚本中将Bash输出捕获到变量

来自分类Dev

无法将输出捕获到Bash中的变量中

来自分类Dev

bash,将管道命令作为捕获输出的命令之一

来自分类Dev

如何在bash脚本中捕获两列ls输出

来自分类Dev

捕获bash输出的语法有什么区别?

Related 相关文章

热门标签

归档