如何重定向用&&amp ;;粘合的命令进入同一档案?

时间:2017-04-23 03:53:15

标签: bash

这就是我写的;例如,

ls > out && cat * > out

但是,我不喜欢重复代码(真实案例要复杂得多),所以我试过

{ ls  &&  cat * } > out

可悲的是,它不起作用,因为它不符合Bash语法,所以如何修复它?

2 个答案:

答案 0 :(得分:1)

首先,您的命令分组语法不正确,您需要在结束括号之前有;

{ ls  &&  cat * ;} 

如果您使用的是子{,(),例如(ls && cat *),则;不需要*,但在此处生成子shell是多余的。

接下来的问题是,当全局(out)输出文件>out也被计算时,因为文件将在扩展发生之前由shell(cat)创建,或者任何其他命令运行(并且out可能会警告您输入/输出文件与GLOBIGNORE有关。要解决这个问题:

  • 您可以使用bash环境变量让GLOBIGNORE=out; { ls && cat * ;} >out 知道在执行通配时要忽略的模式:

    extglob
  • 或使用out选项明确排除shopt -s extglob; { ls && cat !(out) ;} >out 扩展名:

    {{1}}

答案 1 :(得分:0)

您可以使用>>(附加到文件)运算符解决此问题:

ls > out && cat * >> out

或括号:

(ls && cat *) > out