Ubuntu使用zsh,现在有一个别名
alias | grep sayhi sayhi='echo hi' sayhi foo hi foo
但是,我不能在xargs或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
看来我不能在命令行中间接使用别名.
那么我怎么能在这种情况下使用别名呢?
暂且不谈你正在处理两种不同的贝壳:
> xargs只能调用外部实用程序(可执行文件),因此根据定义它不能直接调用别名(直接).
>管道到bash将在子进程中运行,该进程不知道您当前的shell的别名(并且非交互式Bash实例既不会读取通常的配置文件/初始化文件,也不会默认扩展别名).
虽然你可以使它适用于许多使调用复杂化的扭曲,但最好的办法是将你的别名转换为脚本并让xargs / bash调用它.
要获得与别名相同的单字调用体验:
>创建脚本sayhi(没有文件名后缀);示例内容,取自您的后续问题:
#!/bin/bash echo hi $@
>使其直接可执行:chmod x sayhi – 这样您就不必涉及shell可执行文件来调用它.
>将其放在$PATH变量中列出的目录中.
然后,您将能够像路径中的任何其他可执行文件一样调用您的脚本 – 仅通过文件名 – 并且您的问题中的示例命令应该有效.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。