我正在尝试创建一个简单的脚本,它将所有别名转储到 bash 启动时可以加载的文件中,同时确保 -to popd 的别名正常工作:
alias -p | sed 's/alias -=/alias -- -=/' > ~/.bash_aliases
如果我在命令行上运行它,它似乎可以工作,但是如果我将它放入脚本中并运行它(在#!/bin/bash
顶部和chmod +x
),我会得到一个空文件。有人能告诉我我错过了哪些 bash 知识吗?
如果重要的话,我正在使用 bash v4.2.10。
答案1
shell 脚本继承调用程序的环境变量等,但它不继承别名和命令历史记录等内容。
如果您的所有别名都位于一个公共位置,例如~/.bashrc
,您可以首先将该文件源到您的脚本中:
. $HOME/.bashrc
然后,在该 shell 脚本的执行上下文中,您将拥有该文件中定义的所有别名.bashrc
。
如果您的别名定义得到处都是,那么就没有简单的方法来合并它们。您必须将“保存我所有的别名”编写为函数。您可以在您的 中添加类似的内容~/.bash_profile
,例如:
function dumpalias {
alias -p | sed 's/alias -=/alias -- -=/' > ~/.bash_aliases
}
然后,注销并重新登录后,您可以说dumpalias
获得您想要的行为。