【问题标题】:Converting string to argument in bash在bash中将字符串转换为参数
【发布时间】:2020-05-27 21:36:57
【问题描述】:

我想使用 xargs 为 tail 形成一个参数。

"string" | xargs -I '{}' tail -F *{}*

这会导致 tail "*{}*" 这是行不通的。如何删除引号并将其变成tail 的有效参数? 即tail *string*

【问题讨论】:

  • "string" | 不会导致bash: string: command not found 错误吗?你有一个名为string 的命令吗? This results in你怎么知道?你是如何检查结果的? How do I remove the quotes谁添加了qoutes?它们是如何添加的? turn it into a valid argument for tail?"*{}*" 和无效参数吗?你真的有一个文件名,字面意思是*string*,你想要尾巴吗?或者您是否希望 *string* 扩展 以列出与 globulation 模式匹配的文件名? which does not work有错误提示吗?
  • @manu190466 我怀疑您评论中的* 符号已被解释为标记 - 请您检查格式(例如将代码放在反引号内)。
  • 也许你想要的是:echo "string" | xargs -I '{}' tail -F {}
  • @alaniwi 谢谢你的评论,我的格式确实有问题

标签: bash quotes xargs


【解决方案1】:

* 由 Bourne shell(路径名扩展)在您的命令被解析时解释,在它实际执行之前,而不是在 tail 被执行的那一刻。

如果你想让xargs构建的命令服从bash的路径扩展,你需要执行bash

echo "string" | xargs -I '{}' bash -c "tail -F *'{}'*"

安全问题:如果您无法控制发送到 xargs 的文件名,那么使用特制文件名时,您最终可能会无意中执行有害命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2012-06-24
    • 1970-01-01
    • 2013-03-29
    • 2012-11-08
    • 2012-11-23
    相关资源
    最近更新 更多