我正在编写一个 shell 脚本,它将一些二进制文件安装为 systemd 服务。为了保持整洁,该服务在新用户下运行。我想将所有二进制文件保存在该新用户的主目录中。问题是我需要使用 go 构建二进制文件。
似乎我新创建的用户没有找到go
,我想要一些关于如何告诉它在哪里找到它的指点。
下面是我用于执行该任务的 shell 脚本:
#!/bin/bash
sudo adduser --disabled-password --home /home/erigon --shell /bin/bash --gecos "" erigon
sudo -u erigon git clone --branch stable --single-branch https://github.com/ledgerwatch/erigon.git /home/erigon/erigon
cd /home/erigon/erigon
sudo make erigon
失败了/bin/sh: 1: go: not found
我确实已经go
为普通用户安装了:
$ go version
go version go1.18.2 linux/amd64
但实际上新用户并没有看到它:
$ sudo -u erigon go version
sudo: go: command not found
答案1
很可能make
是在路径中没有的环境中运行go
。这可能与您运行脚本的方式有关,而不是用户帐户本身。此类问题在系统级别运行的脚本中很常见,例如来自 cron 或 systemd 的脚本,其中路径未设置或设置为最低默认值。
如果这纯粹是一个路径问题,最简单的解决方案是在脚本中明确将路径设置为合适的路径。
对于您的“普通”用户来说,Go 并未“安装”。只是当您使用 sudo 更改用户时,您的路径设置不正确。以下是一些需要检查的事项:
- 在其工作的用户中,尝试
echo $PATH
查看正确的路径是什么。 - 使用 sudo 更改用户时,请使用
sudo -Hsu erigon
;这样可以正确设置主目录,然后为您提供 shell。再次使用echo $PATH
并检查路径是否正确。如果不正确,请修复它,复制先前的正确路径。然后一切就应该正常了。