别名不能从 shell 脚本运行/执行吗?Mac OS X Sierra 13.x

别名不能从 shell 脚本运行/执行吗?Mac OS X Sierra 13.x

所以这个截图基本上解释了这一点

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命令需要为此实现这些。

相关内容