Bash / Linux 权限被拒绝为 SUDO

Bash / Linux Permissions denied as SUDO

我正在创建一个小的 bash 脚本来自动执行一些简单的任务来处理我的 docker 容器。我的命令之一是清除日志,但这无法响应“权限被拒绝”。

问题是我正在使用 sudo

if [ $CLEAR_OPT == true ]
then
  DOCKER_LOG_PATH=$(docker inspect $DOCKER_ID --format='{{.LogPath}}')
  sudo :> $DOCKER_LOG_PATH;
  exit 0
fi

这个错误。

但是下面的 linux 命令序列不会出错:

sudo -s
:> /var/lib/docker/containers/path/path-json.log

我在没有使用 sudo -s 的情况下进行了测试,它仍然无法在 linux 终端中工作。

有什么我遗漏的吗?我想在执行 sudo 时它会 运行 作为 root 用户的命令?

你的“工作”示例的第二行在一个新的 shell 中执行,它已经 运行 具有 root 权限,因为 sudo -s 启动了一个新的 shell .

但是 shell 脚本中的 :> 将由 shell 而不是 sudo 执行,因此它将 运行 与原来的(可能较低)特权。

解决方法是使用 sudo 将 echo 之类的输出通过管道传输到命令:echo | sudo tee "$DOCKER_LOG_PATH".

一个更简单和更明确的解决方案是使用明确构建的命令来 t运行 分类文件:sudo truncate -s0 "$DOCKER_LOG_PATH".