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

Posted

技术标签:

【中文标题】如何在 xargs 命令中使用 &>>?【英文标题】:How to use &>> in a xargs command? 【发布时间】:2017-11-15 00:38:04 【问题描述】:

专家,

按照这个question我执行这个命令:

使用 posix 的 xargs 参数:

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

我收到以下错误:

file.hml:-c:第 0 行:意外标记 `>' 附近的语法错误 file.hml: -c: line 0: `w3m ".html" &>> "test.log"'

为什么 bash 在我的行执行中不理解 &>>?

正如@Nahuel Fouilleul 所说,“sh (posix) 无法识别 (bash) 重定向 &>>”。

使用 bash 的 xargs 参数

但是,当我执行以下命令时,建议的解决方案不起作用:

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

我收到此错误:

bash:意外标记 `>' 附近的语法错误

为什么 bash 在我的行执行中不理解 &>>?看我的回答

【问题讨论】:

你用某个路径替换 吗? 【参考方案1】:

如果sh (posix) 无法识别 (bash) 重定向 &amp;&gt;&gt;,它可能无法工作。 但是对于某些文件名,该命令仍然会中断。

命令应该是。

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

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

.. | xargs -I w3m  &>> "test.log"

编辑:对于处理文件并写入输出的工具来说,答案是通用的,在查看 w3m 工具后,它似乎是控制台中的网络浏览器,你想做什么?

【讨论】:

谢谢我尝试了第二种解决方案 ".. | xargs -I w3m &>> "test.log" 我收到以下错误:bash: syntax error near unexpected token `> '。我的目录中有 html 文件,我想将它们转储到日志文件中。因此我使用 w3m 在标准输出中显示 html 文件的信息。【参考方案2】:

从here 我意识到运算符“&>>”仅适用于 Bash 版本 4。我使用的是 Bash 版本 3.2.51,所以它不起作用。

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

w3m >> test.log 2>&1

地点:

">>" 将标准输出附加到 test.log

"2>&1" 将标准错误重定向到标准输出的位置

所以使用 xargs 的命令如下:

.. | xargs -I w3m  >> "test.log" 2>&1

【讨论】:

以上是关于如何在 xargs 命令中使用 &>>?的主要内容,如果未能解决你的问题,请参考以下文章

通过 xargs 到 `tag` 命令行工具的管道路径

xargs 原理&使用

xargs 原理&使用

find & xargs

linux中xargs命令的使用方式

linux之xargs使用技巧