如何执行.
/source
执行当前加载/运行源代码脚本的完全替换,例如
$.bashscript
只需将命令/代码脚本添加到当前加载/运行的源脚本中,而如果恰好是相同的标识符名称,则可以替换
但是,请解释如何完全替换它,就好像它在获取新的之前清理当前加载/运行的源一样
答案1
没有简单的方法可以恢复任意命令。比较一下我的这个答案:为什么source
不刷新.bashrc
文件。
你可以做的是开始新鲜的shell,然后 source 您想要的内容。您的问题已标记为狂欢. 有用Bash 的选项:--noprofile
,--norc
或者--rcfile filename
。
其他技巧:
exec program
用 替换当前 shellprogram
,PID 将保留。env -i program
program
在空环境中运行。
因此,以下命令将用一个相当干净的 shell 替换您当前的 shell bash
:
cd / && exec env -i bash --noprofile --norc
该命令单独来看可能不是很有用,但可能是一个很好的起点。
笔记:
这不会触及文件描述符。
</dev/tty >/dev/tty 2>/dev/tty
如果这是您想要的,请附加到命令,以确保将 stdin、stdout 和 stderr(分别为文件描述符 0、1 和 2)连接到控制终端(以防它们被重定向到其他地方)。可以使用以下循环关闭其他单个文件描述符(可能已打开):for i in {3..9}; do exec {i}>&- done unset i
(无论如何都不应使用更高的数字。)您可以将其放在文件中并使用
--rcfile …
而不是 来自动运行此循环--norc
。空环境意味着没有
$TERM
,所以你可能更喜欢env -i TERM="$TERM" bash …
您可能希望保留其他环境变量:,,,,,,
$SHELL
...请$PAGER
参阅$HOME
$USER
$PATH
这个答案理论上,它们中的每一个都可能被您获取的某些东西所改变,因此依赖它们的当前值不一定是最好的主意。您可以明确指定所需的值。我们的交互式界面
bash
仍将使用默认的历史记录文件和相关设置,因此历史记录扩展可能会起作用,并且取决于您之前的操作。请参阅如何启动没有历史记录的 bash 会话。