我需要读取一些具有权限权限的硬件数据,所以我需要使用 asdf 插件作为 root。我该怎么做?
我尝试启动根用户sudo su
但我无法访问 asdf
dr: sudo -E su
问题是sudo
默认情况下不会保留(大多数(环境变量。对于asdf
来说,环境变量ASDF_CONFIG_FILE
、ASDF_DATA_DIR
和ASDF_DIR
都很重要,还有通常的嫌疑人,如PATH
。
幸运的是,我们可以指示sudo
保留所有环境变量。从man sudo
:
-E, --preserve-env
向安全策略指示用户希望保留其现有环境变量。 如果用户没有保留环境的权限,则安全策略可能会返回错误。
资源:
- 来自阿南杜姆达斯的ASDF问题评论
这篇文章的现有答案为我指出了正确的方向:为了将环境变量(包括重要的PATH
(带入sudo shell,需要sudo -E
。
但是,我仍然得到了unknown command: THECOMMAND. Perhaps you have to reshim?
.对我有用的是获取要运行的命令和要运行的二进制文件的路径。
就我而言,我正在尝试使用hostile
主机管理工具。它失败了,因为它找不到node
。通过指定完整的node
路径和hostile
脚本的直接路径,我能够绕过 reshim 错误。
sudo -E `asdf which node` `asdf which hostile` load the_file.txt
类似的东西
sudo -E $(which asdf) list
或在鱼中
sudo -E (which asdf) list
将asdf
替换为所需的 asdf 插件,然后将命令参数放在后面,如上list
检查您的垃圾箱在哪里(例如 which iex
(,就我而言
/home/<user>/.asdf/shims/
成为根,带来用户环境
sudo -Es
导出填充程序(如错误所指出的那样(
export PATH=/home/riccardo/.asdf/shims/:$PATH
你很好去:竖起大拇指: