Nel*_*son 4 bash scripts 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
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在同一脚本中更新和运行更新?
任何帮助深表感谢。
实际上,您.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。