如何使用&>>在xargs命令中?

时间:2017-06-13 09:51:34

标签: bash

专家,

question之后执行此命令:

使用posix

xargs参数:

find <somePath> -name '*.html' | sort -n | xargs -I{} sh -c 'w3m "{}" &>> "test.log"' --{}

我收到以下错误:

  • file.hml:-c:第0行:意外令牌附近的语法错误`&gt;&#39;
  • file.hml:-c:第0行:`w3m&#34; .html&#34; &安培;&GT;&GT; &#34; test.log中&#34;&#39;

为什么bash不理解&amp;&gt;&gt;在我的执行中?

正如@Nahuel Fouilleul所说&#34; sh(posix)并不认识(bash)重定向&amp;&gt;&gt;&#34;。

使用bash的xargs参数

但是,当我执行以下命令时,建议的解决方案无效:

find <somePath> -name '*.html' | sort -n | xargs -I{} w3m {} &>> "test.log"

我收到此错误:

  • bash:意外令牌附近的语法错误`&gt;&#39;

为什么bash不理解&amp;&gt;&gt;在我的行执行?看我的回答

2 个答案:

答案 0 :(得分:2)

如果sh(posix)无法识别(bash)重定向&>>,则可能无效。 但该命令仍然可以破坏某些文件名。

命令应该是。

.. | xargs -I{} bash -c 'w3m "$1" &>> "test.log"' "process_name_you_want" {}

或者为了避免打开日志文件,每个文件的重定向都可以移出

.. | xargs -I{} w3m {} &>> "test.log"
编辑:答案是处理文件和写入输出的工具的一般性,在查看w3m工具之后,它似乎是控制台中的Web浏览器,你想做什么?

答案 1 :(得分:1)

here我意识到运营商“&amp;&gt;&gt;”仅适用于 Bash版本4 。我正在使用 Bash版本3.2.51 ,所以它不起作用。

对于bash 4之前的版本,需要两个运算符:

time.sleep()

其中:

“&GT;&gt;” 中将stdout附加到test.log

“2&gt;&amp; 1”将stderr重定向到sdout的去向

因此使用xargs的命令如下:

w3m >> test.log 2>&1