Ubuntu使用zsh,现在有alias
alias | grep sayhi
sayhi='echo hi'
sayhi foo
hi foo
但是,我无法在alias
或bash中使用此xargs
,请参阅下文
➜ ~ 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
?
答案 0 :(得分:3)
暂且不论你正在处理两个不同的shell :
xargs
只能调用外部实用程序(可执行文件),因此根据定义,它不能直接调用别名。
管道到bash
将在子进程中运行,该进程不知道您当前的shell的别名(并且非交互式Bash实例将不会读取通常的配置文件/初始化文件默认情况下也不扩展别名。
虽然可以使其适用于使调用复杂化的许多扭曲,但最好的办法是将别名转换为脚本并拥有xargs
/ { {1}}调用它。
获得与别名相同的单字调用体验:
创建脚本bash
(没有文件名后缀);示例内容,取自您的后续问题:
sayhi
使直接可执行文件:#!/bin/bash
echo hi $@
- 这样您就不必涉及shell可执行文件来调用它。
chmod +x sayhi
变量中列出的目录中。然后,您将能够像路径中的任何其他可执行文件一样调用您的脚本 - 仅通过文件名 - 并且您问题中的示例命令应该有效。