我正在尝试设置一个环境变量编辑器并将其更改为默认值,但由于这种行为
/usr/bin/nano
我无法使用鱼常见问题解答set -Ux
如何找出fish继承的是哪个设置?(这样我就可以改变它)
编辑:
/etc/environment
为空
set -S EDITOR
$EDITOR: set in global scope, exported, with 1 elements
$EDITOR[1]: |/usr/bin/nano|
$EDITOR: set in universal scope, exported, with 1 elements
$EDITOR[1]: |/usr/bin/nvim|
$EDITOR: originally inherited as |/usr/bin/nano|
在fish中,从3.6.0版本开始,你可以询问
set --show variable
,它会告诉你fish最初继承了什么值。例如:这将帮助您确定该值是否是 Fish 在启动时从其父进程获取的值,或者是否在 Fish 内部进行了更改。
如果您的问题只是打开编辑器打开nano的东西,那么完全有可能没有任何东西实际设置编辑器,并且这些东西默认查看“nano”,“vim”,“emacs”,“joe”等列表打开第一场比赛。在这种情况下
set --show EDITOR
,不会向您显示任何内容。或者你继承了它,并且它只是在 /etc/bashrc 或 /etc/profile 中设置 - 发行版通常在这些中设置默认设置。只需
grep -r EDITOR /etc
显示其中任何一个即可。如果您确实有一个继承的 $EDITOR,并且在 /etc/ 中找不到它,您可以做一些事情,但它们严重依赖于操作系统并且不可移植。Fish 不是父进程,您需要查看父进程列表。
例如,Linux 有 /proc/ 文件系统,您可以在 /proc/$pid/environ 中找到进程的环境,其中包含 NUL 分隔的“var=val”字段。
所以你可以
直到父进程 pid 为 0,这意味着没有父进程(这将是 pid 为 1 的 init)。
作为一个快速草图:
您可能会得到如下输出:
这意味着 pid“1305”的进程具有“foo”的值“bar”,而其父进程在其环境中没有该值。请注意,在此示例中,我在进程 759 中设置了变量 (with
export foo=bar
) - 但它的环境中没有该变量,因为这是它继承的值。因此,在大多数情况下,设置它的过程将是最后一个具有继承值的过程之后的过程。
您可以
ps
通过以下方式询问有关该过程的信息ps -p 759
(根据需要插入您的 PID):因此在这种情况下,一个 bash 进程设置了该变量,另一个 bash 进程 (1305) 继承了它。