我正在寻找一种方法来消除某些附加代码以.bashrc
自动强制加载其环境的安装程序的不良行为。这个问题出现了几次,主要是在 Conda 上,在某些情况下,用户最终会使用一个损坏的帐户阻止他们再登录。
我试图在 .bashrc 的末尾添加一个未关闭的 here-document,如下所示:
# .bashrc
#...
: <<'__END__'
哪个有效,但会产生解析错误烦人的警告。
什么是一种干净的方法(不使 .bashrc 只读)?
我正在寻找一种方法来消除某些附加代码以.bashrc
自动强制加载其环境的安装程序的不良行为。这个问题出现了几次,主要是在 Conda 上,在某些情况下,用户最终会使用一个损坏的帐户阻止他们再登录。
我试图在 .bashrc 的末尾添加一个未关闭的 here-document,如下所示:
# .bashrc
#...
: <<'__END__'
哪个有效,但会产生解析错误烦人的警告。
什么是一种干净的方法(不使 .bashrc 只读)?
如果你
.bashrc
以Bash 将忽略之后添加的任何行,因为
.bashrc
它像源脚本一样处理:(
exit 0
导致 shell 退出,这不是你想要的。)虽然 Stephen 的技巧确实有效,但这里的根本问题是安装程序以允许它修改您的
.bashrc
. 如果这样做,它可能会对其他可能导致交互中断或完全恶意的事物进行各种不需要的更改(从故意发送的电话家庭间谍软件到来自供应链妥协或内部威胁的彻底恶意软件)。正确的解决方案是不要以任何特权运行“安装程序”。相反,您可以在一次性容器或用户帐户中运行它们,然后仅将所需文件从“暂存”环境复制到您要在其中使用它们的环境。我使用我编写的工具usand做了类似的事情,它用于
unshare
创建新用户和挂载名称空间,以阻止网络访问和对当前目录之外的文件及其下的所有内容的写访问。虽然它目前不是很灵活,但可以应用许多相同的概念来做适合您特定工作流程的事情。Using
return
可以防止执行额外的内容,但它不会阻止文件随着时间的推移被所有垃圾填满。它还会产生一个问题,您不小心在下面添加了一些东西,return
并且必须弄清楚为什么您的更改没有生效。我之前所做的是在末尾添加一行,例如
# END_ACTUAL_CONTENT
. 我创建了一个脚本来定位这个标记并删除位于它之后的所有内容,并将该脚本设置为定期运行。您还可以使用这样的功能来消除那些烦人的安装程序:
安装您的程序,
bashrc_save; ./install.sh; bashrc_restore
并且它对您的.bashrc
文件所做的任何更改都将自动回滚。我目前更进一步。我将我的
.bashrc
文件(以及一堆其他配置文件)存储在一个单独的目录~/.configfiles
中,并创建指向这些文件通常所在位置的符号链接。该文件夹的内容位于 git 存储库中。我这样做是为了使系统之间的同步变得容易,但它还有一个额外的好处,那就是能够用来git diff
查看安装程序所做的所有更改并用于git restore
整体还原它们。