所以我愚蠢地无意中破坏了~/.bashrc。如果我打开了带有先前设置的终端,有没有办法将当前设置导出回新的 .bashrc? (我已经set > ~/.bashrc
从上述终端之一进行了尝试,取得了一定程度的成功,但想知道是否有更神奇的方法。)
答案1
.bashrc
您可以尝试的一件事是从正在运行的 bash 实例的内存中恢复。在 Linux 上,运行以对由 PID 指定的进程进行内存转储。这是否有机会起作用取决于 bash 如何管理其内存;我还没有检查源代码来看看它是否可能。它在 Debian jessie amd64 上对我不起作用。gcore PID
如果这不起作用,您可以保存当前设置,但无法恢复它们的设置方式,因此大量信息将会丢失。如果您的配置取决于机器、终端类型等,那么您只能恢复仍在运行的 bash 实例的设置。
以可读回的形式打印出所有变量。这包括很多你必须解决的噪音。环境变量(标有
declare -x
)不应该在你的中定义.bashrc
但无论如何你可能已经这样做了。删除 bash 自动设置的变量(查看手册并查看declare -p
in的输出bash --norc
)。declare -p
打印出所有函数。这包括不是由您定义的函数,例如由完成系统定义的函数(您想要的函数
. /etc/bash_completion
)。declare -f
打印出别名。这些可能可以按原样使用。
alias
打印出 shell 选项。与
shopt
in的输出进行比较bash --norc
,看看您更改了什么。shopt
打印出完成设置(如果您使用上下文相关的完成系统)。其中大部分可能来自完成系统;找到你已经调整过的那些可能有点困难。
complete
如果您在您的
.bashrc
而不是在.inputrc
.这包括默认绑定。bind -p
从现在开始,备份所有文件,并将配置文件置于版本控制之下。
答案2
.bashrc
您可以从获取默认值/etc/skel/.bashrc
。
还有一种方法可以从 恢复某个进程打开的文件/proc/PID/fd/<files>
,但事实并非如此,.bashrc
因为它不是由 bash 进程永久打开的。