所以这个截图基本上解释了这一点
https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b
我设置了一些别名,用于在终端内打开新选项卡并执行其他操作,甚至设置了运行调试 shell 脚本的别名,但该debug.sh
脚本仅使用别名newtab
来尝试打开新选项卡,这在仅输入时有效newtab
,但它不起作用,在 .sh 或任何其他可执行文件中的任何其他别名也不起作用,我该如何解决这个问题?
我注意到的一件事是,我把所有的export
' 和alias
' 都放进了/etc/bashrc
而不是~/.bash_profile
或其他的,而且我几乎没有看到/etc/bashrc
任何地方提到
我做得对吗?
答案1
别名扩展只能从交互式 shell 完成,而不在脚本内debug
完成,因此扩展为newtab
,但newtab
本身并不扩展,因为它是从脚本调用的。
如果你使用导出函数而不是别名,它将起作用:-
debug() { $scripts/debug.sh; }; export -f debug
...
newtab() { $scripts/newtab.osx.sh; }; export -f newtab
导出是必要的,因为脚本在子 shell 中运行,尽管对于您引用的特定实例,它只newtab
需要是一个函数。
函数可以在任何地方代替别名,但可以做更多的事情,例如在运行字符串末尾添加一个额外的参数,这是一个非常简单的要求,但别名无法做到。事实上,它们可以做脚本可以做的任何事,但与脚本不同的是,它们在当前 shell 中运行,因此它们可以更改环境和当前目录,而脚本.
或source
命令需要为此实现这些。