在非交互式 shell 中展开别名

Posted

技术标签:

【中文标题】在非交互式 shell 中展开别名【英文标题】:Expand aliases in non-interactive shells 【发布时间】:2014-06-09 02:51:54 【问题描述】:

bash中,我们可以使用shopt -s expand_aliases来扩展脚本中的别名。

zshcshtcsh 的等效命令是什么?它们甚至存在吗?

在我的精力集中在zsh 上,我还没有找到这样的命令。我什至尝试使用脚本中的别名来获取文件,但它不起作用。

【问题讨论】:

zsh 似乎默认扩展别名。你能写一些在 zsh 中不起作用的示例代码吗? 如果我在(例如)~/.zshrc 中设置了别名并且我在脚本顶部设置了source $HOME/.zshrc,则该脚本将无法使用存在于~/.zshrc 中的别名. 它有效,至少对于zsh。谢谢你。请将其添加为答案,以便我接受。 【参考方案1】:

对于zsh,您可以使用setopt aliases

#!/usr/bin/zsh

alias hoo="echo bar"
unsetopt aliases
hoo # outputs `./test.zsh:5: command not found: hoo`
setopt aliases
hoo # outputs `bar`

详情请参阅man zshoptions

对于cshtcsh,获取文件(例如source $HOME/.cshrc)就足够了。

【讨论】:

想出了如何在cshtcsh 中做到这一点:在相关文件上使用source 就足够了。 aliases 选项在 zsh 中默认开启(至少,截至 2019 年 2 月)

以上是关于在非交互式 shell 中展开别名的主要内容,如果未能解决你的问题,请参考以下文章

shell配置文件

Linux学习笔记三

8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重

shell 交互脚本菜单

Linux操作系统基础解析之——Bash(Shell)基础知识

alias命令(使用命令别名)