【问题标题】:Why do I need to sudo to use leiningen (installed in /bin) on Linux?为什么我需要 sudo 才能在 Linux 上使用 leiningen(安装在 /bin 中)?
【发布时间】:2015-09-15 23:45:55
【问题描述】:

我在fedora上安装了leiningen,我按照说明操作:

  1. 下载脚本
  2. 将脚本(通过命令行)粘贴到 ~/bin (PATH)
  3. 执行脚本
  4. 运行 lein(我必须使用 sudo 完成)以自行安装

但每次我想运行“lein”命令时,我都必须使用“sudo”。

我该如何解决这个问题?或者我能做些什么来解决这个问题?

注意:我在 /bin 安装了 leiningen,但是当我 cd ~/bin 作为安装指南时说我得到了有关文件夹的错误(不存在)。

【问题讨论】:

  • 如果它位于 /bin,那是 root 拥有的文件夹,并且(某些)感觉您必须具有升级的权限才能运行它。如果它位于 ~/bin,则它应该在您自己的主文件夹中。 which lein 告诉你什么?
  • @Makoto:我建议type lein 而不是which lein;后者是外部命令,不知道 shell 别名、函数等,而前者是内置命令,可以查看 shell 执行过程中考虑的所有内容(包括缓存先前的 PATH 查找,使其更准确即使是已知的外部命令)。

标签: linux clojure fedora leiningen


【解决方案1】:

您将它安装在/bin 并使用 sudo 运行它以安装 lein jar,这意味着它们由 root 拥有(并且可能只能读取)。您应该在~/bin 安装脚本。你可以这样修复它:

sudo rm /bin/lein
sudo rm ~/.lein
mkdir ~/bin
cd ~/bin
wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein
export PATH="${HOME}/bin:${PATH}"
lein

您还应该将${HOME}/bin 添加到您的$PATH。如果您使用的是 bash,请将其添加到 ~/.bashrc:

export PATH="${HOME}/bin:${PATH}"

您可以使用echo

echo 'export PATH="${HOME}/bin:${PATH}"' >> ~/.bashrc

【讨论】:

  • 如何添加最后一行? (我是linux初学者,对不起)
  • 理想情况下,对 PATH 的更改应该进入 .bash_profile,而不是 .bashrc。在 .bashrc 中,即使在作为其父级的登录 shell 中应用后,它们也会被重新应用到每个新 shell,因此在调用多个嵌套 shell 后,您最终会得到 PATH=$HOME/bin:$HOME/bin:$HOME/bin:...
  • ...如果您要将其保存在.bashrc 中,那么至少添加一些安全措施;例如:[[ $PATH =~ (^|:)"$HOME/bin"(:|$) ]] || PATH=$HOME/bin:$PATH
  • 请注意,export 在这里不是必需的(尽管它不会损害任何东西):它标记要导出到环境的变量,但 PATH 到那时已经是环境变量正在执行交互式用户的点文件,因此export 无效。
  • 另外,不要使用 sudo (在前两步之后);如果您使用给定的说明安装它,则不需要将 sudo 与 lein 一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
相关资源
最近更新 更多