更新脚本的 ~/.bashrc 文件

更新脚本的 ~/.bashrc 文件

我正在开发一个脚本,它将配置和设置一个 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

相关内容