【问题标题】:Emacs adding (prepending) ".:" to PATH in shellEmacs 在 shell 中向 PATH 添加(前置)“.:”
【发布时间】:2014-01-20 10:36:09
【问题描述】:

我注意到我在 Emacs (24.3.1) 中的 shell 缓冲区在我的 Mac OS X 上的 $PATH 变量的开头有(一个额外的)“.:”(但在我的 linux 笔记本电脑上没有) . 文件),与我的常规外壳相比,它位于中间某处。这只是我,还是 Mac 上的 Emacs 出于某种目的这样做?我可以阻止它吗?我认为它没有造成任何实际问题,但它确实会引起 RVM 的警告,理论上它是有风险的。

谢谢!

【问题讨论】:

    标签: macos shell emacs path rvm


    【解决方案1】:

    根据shell 命令的emacs 帮助条目,启动的shell 将文件~/.emacs_SHELLNAME~/.emacs.d/init_SHELLNAME.sh 作为第一个命令列表(如果其中一个文件存在)。因此,您可以在这两个文件之一中修改PATH 环境变量的值,但是您应该检查您的shell(可配置为explicit-shell-file-name 变量、ESHELL 环境变量或shell-file-name 变量,按此顺序)不会忽略启动期间发出的命令。

    另一个原因可能是您的(系统范围的)配置将当前目录包含在 PATH 值中(您可以在终端中使用 echo $PATH 进行检查),因此您必须重新配置 shell 而不是 @ 987654331@.

    考虑到安全性,将当前目录放在PATH 中确实存在无意执行错误程序的风险(例如:您有一个名为test 的自写程序并想要执行/usr/bin/test)。如果在使用超级用户权限时发生这种情况,这可能会导致一些严重的问题。

    【讨论】:

    • “安全问题”可能会通过在 PATH 末尾附加点而不是在开头添加点来减少。
    • @choroba:是的,这降低了执行未安装程序的风险(或根本无法通过PATH 变量访问)。
    • 谢谢!我没有任何 ~/.emacs_* 或 ~/.emacs.d/init_* 文件。我没有设置 ESHELL。 explicit-shell-file-name 为零。 shell-file-name 是“/bin/bash”。我认为它不受任何系统范围的文件的影响——而且我已经确保我的常规 shell 没有这个。我不认为我会创建一个名为“test”的可执行文件,并且我会尽量避免创建与重要的共享可执行文件同名的可执行文件。我确实有时认为我应该服用。走出我的路,但我是一只老狗,我已经有很多年了。
    • 我只是想弄清楚为什么我的 Mac 上的 emacs 有 .前面的路径与我在其他地方的环境不同,我使用一组共享的 .文件。但是,多亏了你的回答,我现在添加了一个 ~/.emacs_bash 文件来清理带有PATH=`ruby -e 'puts ENV["PATH"].split(":").reverse.uniq.reverse.join(":")'` 的路径,它删除了重复并只留下最后一个......我认为这就是我想要的。谢谢。
    猜你喜欢
    • 2015-11-06
    • 2014-10-20
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2014-10-05
    • 2013-09-21
    相关资源
    最近更新 更多