【发布时间】:2012-03-30 16:05:50
【问题描述】:
我很难理解命令重定向/重用...
我知道有 <(...) <(...) 方法和 $( ... && ... ) 技术用于组合输出。但我并没有真正完全理解有什么区别(我意识到(...) 会将您转储到一个新的外壳中,导致您可能会跳转目录并丢失您尚未导出的任何变量,但我不确定它如何影响一般重定向方案),在浏览以下示例和说明后,我仍然对如何进行一对多重定向感到非常困惑:
Advanced Bash Scripting Guide 1
Advanced Bash Scripting Guide 2
我自己尝试使用它主要导致“模糊重定向”错误。
例如,假设我想做一个由下面的伪代码给出的单行
CMD 1 && CMD 2 && CMD 3 --> (1)
CMD 4 (1) --> (2)
CMD 5 (1) --> CMD 6 --> (3)
CMD 7 (2) && CMD 8 (3) --> (4)
CMD 9 (2) --> (5)
CMD 10 (2) (3) -->(6)
VAR= echo (4) && echo (5) && echo (6)
或者作为流程图
CMD 1 +CMD 2 && CMD 3
|\
| ---> CMD 5 ------> CMD 6-----\
V / V
CMD 4 ----------------u--------> CMD 10
| \ V /
| -------->CMD 7 + CMD 8 /
V | /
CMD 9 | /
\ | /
\ V /
--------> VAR <----------
其中输出被指定为-->; -->(#) 给出了在另一个操作中重用的存储空间;和组合操作由&&给出。
我目前不知道如何在没有冗余代码的情况下在一行中执行此操作。
我想真正掌握命令重定向,这样我就可以制作一些强大的单线。
希望这已经足够清楚了...如果您需要,我可以为命令提供概念证明示例,但伪代码应该会给您这个想法。
【问题讨论】:
-
我不明白你说有
-
哦,也许你的意思是 'cat out3' ?
-
我的意思是“输出”,因为
-
有点困惑你谈论管道和重定向,但你的伪代码是关于命令替换的。
-
是的...或者举一个更高级的例子
sort <(cd $CURR_DIR && find . -type f -ctime $FTIME) \ <(cd $CURR_DIR && find . -type f -atime $FTIME) \ <(cd $CURR_DIR && find . -type f -mtime $FTIME) | uniq
标签: bash scripting redirect command-substitution