gpt4 book ai didi

shell - 我如何在 xargs 中使用别名

转载 作者:行者123 更新时间:2023-12-04 20:36:22 25 4
gpt4 key购买 nike

Ubuntu 使用 zsh,现在有了 alias

alias | grep sayhi
sayhi='echo hi'

sayhi foo
hi foo

但是,我不能使用这个 aliasxargs或 bash,见下文
➜  ~  echo foo | xargs -i sayhi {}
xargs: sayhi: No such file or directory
➜ ~ echo foo | awk '{print "sayhi "$0}'
sayhi foo
➜ ~ echo foo | awk '{print "sayhi "$0}'|bash
bash: line 1: sayhi: command not found

好像不能用 alias在命令行中间接。

那么我该如何使用 alias在这种情况下?

最佳答案

撇开您正在处理两种不同的 shell 这一事实:

  • xargs只能调用外部实用程序(可执行文件),因此根据定义,它不能(直接)调用别名。
  • 管道至 bash将在不知道当前 shell 别名的子进程中运行(并且非交互式 Bash 实例既不会读取通常的配置文件/初始化文件,也不会默认扩展别名)。

  • 虽然您可以使用许多使调用复杂化的扭曲,但最好的办法是将别名转换为脚本并具有 xargs/ bash调用那个。

    要获得与别名相同的单字调用体验:
  • 创建脚本 sayhi (没有文件名后缀);示例内容,取自您的后续问题:
    #!/bin/bash
    echo hi $@
  • 使其直接可执行:chmod +x sayhi - 这样您就不必涉及 shell 可执行文件来调用它。
  • 将它放在您的 $PATH 中列出的目录中多变的。

  • 然后,您将能够像路径中的任何其他可执行文件一样调用您的脚本 - 仅通过文件名 - 并且您的问题中的示例命令应该可以工作。

    关于shell - 我如何在 xargs 中使用别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34868154/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com