【问题标题】:How to sudo a bash script whose parent dir is in the $PATH?如何 sudo 其父目录在 $PATH 中的 bash 脚本?
【发布时间】:2017-05-12 07:32:17
【问题描述】:

例如

~/Desktop/scripts$PATH

cat ~/Desktop/scripts/hi

#!/bin/bash
echo hi

我尝试过的(当前目录是~):

hi # CLI said "hi"
sudo -E hi # sudo: hi: command not found
se hi # sudo: hi: command not found # alias se="sudo -E "

如何 sudo 脚本?

【问题讨论】:

  • 先修复she-bang,应该是#!/bin/bash,没有空格
  • 你可以试试sudo -E bash ~/hi
  • @Inian 我已经修复了she-bang,sudo -E bash ~/hi 报告了No such file or directory
  • ~/hi 不是脚本位置,所以No such file or directory 错误是正常的。我猜@Inian 的意思是sudo -E bash ~/Desktop/scripts/hi
  • @n00dl3 我同意你的看法。我只想使用命令 $PATH 来避免完成脚本的路径。

标签: linux bash shell terminal sudo


【解决方案1】:

尝试以下方法:

sudo PATH="${PATH}" bash -c "hi"

解释见 man sudoers(5):

默认情况下,env_reset 选项处于启用状态。这会导致在新的最小环境中执行命令。在 AIX(和没有 PAM 的 Linux 系统)上,使用 /etc/environment 文件的内容初始化环境。除了 env_check 和 env_keep 选项允许的调用过程中的变量之外,新环境还包含 TERM、PATH、HOME、MAIL、SHELL、LOGNAME、USER、USERNAME 和 SUDO_* 变量。这实际上是环境变量的白名单。

【讨论】:

  • 将 ~/Desktop/scripts 更改为完整路径,即 /home/user/Desktop/scripts
  • 您的PATH 点是正确的。 sudo PATH="${PATH}" bash hi 工作!
  • bach 应该是 bash
猜你喜欢
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
相关资源
最近更新 更多