问题描述
我想创建一个包含写保护目录中的内容的文件。我不知道为什么它说 line 24: sudo: Permission denied
。请检查我的代码。
echo $(wget -q -O - "$SOURCE") > sudo "$FILE";
在 Ubuntu 上测试过。
解决方法
该代码表示“将 wget 和 $FILE 的输出写入当前目录中名为 sudo 的文件”。
错误 #1:>
表示写入文件。您打算通过管道传送到 sudo
。
这就是导致错误的原因。您不是在运行 sudo
,而是在编写一个名为 sudo
的文件。 (权限被拒绝,因为当前用户没有权限。)
错误 #2:sudo command
执行命令。你写了sudo $(FILE)
。这意味着执行 $(FILE)
。
错误 #3:$(wget ...)
将对您获取的文档执行 shell 参数拆分等。如果获取的文档太长,则会溢出命令行缓冲区。可能错了。
我会这样做:
wget -q -O - "$SOURCE" | sudo tee "$FILE" > /dev/null
您也可以使用 dd -of="$FILE"
代替 tee "$FILE"
。 > /dev/null
用于压缩 dd
或 tee
写入标准输出的任何内容。
请注意,以下操作无效。命令解析和重定向由 非特权 用户 shell 完成。它无权打开 $(FILE)
...
# Simpler but incorrect
wget -q -O - "$SOURCE" | sudo cat > "$FILE"
警告:以上都没有经过测试!!