我怎么能在 xargs 中使用别名
How could I use alias in xargs
Ubuntu 使用 zsh,现在有一个 alias
alias | grep sayhi
sayhi='echo hi'
sayhi foo
hi foo
但是,我无法在 xargs
或 bash 中使用此 alias
,请参阅下文
➜ ~ echo foo | xargs -i sayhi {}
xargs: sayhi: No such file or directory
➜ ~ echo foo | awk '{print "sayhi "[=11=]}'
sayhi foo
➜ ~ echo foo | awk '{print "sayhi "[=11=]}'|bash
bash: line 1: sayhi: command not found
看来我不能在命令行中间接使用alias
。
那么在这种情况下我该如何使用 alias
?
抛开你正在处理 两个不同的 shells:
xargs
只能调用 外部实用程序(可执行文件),因此根据定义它不能(直接)调用别名。
管道连接到 bash
将 运行 在一个 child 进程中,该进程不知道您当前的 shell别名(默认情况下 non-interactive Bash 实例既不会读取通常的配置文件/初始化文件,也不会扩展别名)。
虽然您可以使它与许多使调用复杂化的扭曲一起工作,但最好的选择是将您的别名转换为 script 并且让 xargs
/ bash
调用它。
要获得与别名相同的 single-word 调用体验:
创建脚本sayhi
(没有文件名后缀);示例内容,取自您的 follow-up 问题:
#!/bin/bash
echo hi $@
使其直接可执行:chmod +x sayhi
- 这样你就不必涉及shell可执行文件来调用它.
- 将其放在
$PATH
变量中列出的目录中。
然后您将能够像路径中的任何其他可执行文件一样调用您的脚本 - 仅通过文件名 - 并且您问题中的示例命令应该有效。
Ubuntu 使用 zsh,现在有一个 alias
alias | grep sayhi
sayhi='echo hi'
sayhi foo
hi foo
但是,我无法在 xargs
或 bash 中使用此 alias
,请参阅下文
➜ ~ echo foo | xargs -i sayhi {}
xargs: sayhi: No such file or directory
➜ ~ echo foo | awk '{print "sayhi "[=11=]}'
sayhi foo
➜ ~ echo foo | awk '{print "sayhi "[=11=]}'|bash
bash: line 1: sayhi: command not found
看来我不能在命令行中间接使用alias
。
那么在这种情况下我该如何使用 alias
?
抛开你正在处理 两个不同的 shells:
xargs
只能调用 外部实用程序(可执行文件),因此根据定义它不能(直接)调用别名。管道连接到
bash
将 运行 在一个 child 进程中,该进程不知道您当前的 shell别名(默认情况下 non-interactive Bash 实例既不会读取通常的配置文件/初始化文件,也不会扩展别名)。
虽然您可以使它与许多使调用复杂化的扭曲一起工作,但最好的选择是将您的别名转换为 script 并且让 xargs
/ bash
调用它。
要获得与别名相同的 single-word 调用体验:
创建脚本
sayhi
(没有文件名后缀);示例内容,取自您的 follow-up 问题:#!/bin/bash echo hi $@
使其直接可执行:
chmod +x sayhi
- 这样你就不必涉及shell可执行文件来调用它.- 将其放在
$PATH
变量中列出的目录中。
然后您将能够像路径中的任何其他可执行文件一样调用您的脚本 - 仅通过文件名 - 并且您问题中的示例命令应该有效。