我有一些安装的脚本/etc/profile.d它定义了应该导出并在命令行上可用的函数。示例脚本如下所示:
# This function should be available as a command.
function gcd () {
}
# Bash completions for gcd
_gcd_completions () {
}
complete -F _gcd_completions gcd
这应该使名为 的命令gcd
在终端中可用。
它在登录 shell 中工作正常,但在交互式 shell 中不起作用(即“未找到命令‘gcd’”),就像我登录到 X11 然后从那里启动控制台一样。
我找到了一段对话这里这建议使用export -f
导出函数。我尝试过:
# This function should be available as a command.
function gcd () {
}
# Bash completions for gcd
_gcd_completions () {
}
export -f gcd
complete -F _gcd_completions gcd
但这并没有改变行为。
我也尝试过export
,也只是declare -fx
,没有成功。
我注意到,如果我直接source /etc/profile
从 X 终端,那么命令(和完成,fwiw)开始工作。所以我知道语法并且一切至少都是正确的,而且我知道/etc/配置文件正在执行脚本并设置命令。它只是不会在任何这些交互式 shell 控制台中自动工作。
我还注意到我在其他环境中声明的一些环境变量/etc/profile.d脚本在交互式 shell 中可用,所以我知道/etc/配置文件正在这些 shell 中做一些事情。
我怎样才能做到这一点?