更新脚本的 ~/.bashrc 文件

Nel*_*son 4 bash scripts bashrc

我正在开发一个脚本来配置和设置 ubuntu-desktop 环境。它所做的更改之一是将函数和其他内容附加到~/.bashrc文件中。在脚本的后面,我需要调用添加到的函数之一,~/.bashrccommand not found出现错误。这是一个示例脚本:

# t.sh
#!/bin/bash

text='test-func() { echo It works!; }'
echo "$text" >> ~/.bashrc

source ~/.bashrc
test-func

echo checkpoint
Run Code Online (Sandbox Code Playgroud)

输出:

./t.sh: line 10: test-func: command not found
checkpoint
Run Code Online (Sandbox Code Playgroud)

我认为采购~/.bashrc会更新外壳,允许我调用,test-func但事实并非如此。谷歌搜索我发现exec bash替换source ~/.bashrc.

新输出:

./t.sh: line 10: test-func: command not found
Run Code Online (Sandbox Code Playgroud)

根据我对 的理解exec,它只是创建了一个切断脚本的新外壳;因此“检查点”永远不会被打印出来。

如何~/.bashrc在同一脚本中更新和运行更新?

任何帮助深表感谢。

Mal*_*ppa 5

实际上,您.bashrc确实获得了来源。但是,.bashrc旨在由交互式 shell 读取。运行脚本的 shell 不是交互式的。

在 Ubuntu 中,.bashrc检查获取它的 shell 是否是交互式的,否则停止执行。您应该在开头找到这一行:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)

这会导致您的脚本在读取您的函数之前停止获取文件。

您可以简单地将您的函数附加到另一个文件.bashrc,它应该可以正常工作。如果您坚持使用.bashrc,您可以PS1在采购之前简单地将变量设置为脚本中的某个虚拟值.bashrc

  • 感谢@MalteSkoruppa 和@Serg 提供的非常有帮助的意见!我已经将我所有的 `.bashrc` 添加到一个单独的文件中,代码和文件整洁,它解决了我的问题。我可以在同一个脚本中创建、获取和调用 `.bash_functions` 文件。 (2认同)