我正在开发一个脚本,它将配置和设置一个 ubuntu-desktop 环境。它所做的更改之一是将函数和其他内容附加到文件中~/.bashrc
。在脚本的后面,我需要调用添加的函数之一~/.bashrc
,但出现了command not found
错误。这是一个示例脚本:
# t.sh
#!/bin/bash
text='test-func() { echo It works!; }'
echo "$text" >> ~/.bashrc
source ~/.bashrc
test-func
echo checkpoint
输出:
./t.sh: line 10: test-func: command not found
checkpoint
我以为 sourcing~/.bashrc
会更新 shell 以允许我调用,test-func
但事实并非如此。我在 Google 上搜索后发现exec bash
可以替换source ~/.bashrc
。
新输出:
./t.sh: line 10: test-func: command not found
据我了解exec
,它只是创建了一个切断脚本的新 shell;因此“检查点”永远不会被打印出来。
如何~/.bashrc
在同一个脚本中更新并运行更新?
任何帮助深表感谢。
答案1
实际上,你的.bashrc
脚本确实被获取了。但是,.bashrc
它旨在被交互式 shell 读取。运行脚本的 shell 不是交互式的。
在 Ubuntu 中,.bashrc
检查 shell 是否是交互式的,否则停止执行。您应该在开头找到这一行:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
这会导致您的脚本在读取您的函数之前停止获取文件。
您只需将函数附加到另一个文件即可,.bashrc
它应该可以正常工作。如果您坚持使用.bashrc
,您可以在获取之前将变量设置PS1
为脚本中的某个虚拟值.bashrc
。