我将如何创建一个文本文件并在 bash [重复] 中使用 sudo 权限填充它

Posted

技术标签:

【中文标题】我将如何创建一个文本文件并在 bash [重复] 中使用 sudo 权限填充它【英文标题】:How would I create a text file and fill it with sudo permission in bash [duplicate] 【发布时间】:2022-01-07 03:38:41 【问题描述】:

我正在尝试在需要 sudo 权限的目录中创建和填充文件。

编辑: 似乎根据测试建议的类似帖子。

sudo su -c "echo 'put in file' > file_name"
echo "Some text" | sudo tee /etc/file

都会在需要 sudo 权限的目录中创建一个文件

【问题讨论】:

无法重现 确切的输出是什么? tee 应该为你创建目标文件。 如果你没有 /etc 可以解释它,但这似乎在任何合理的常规系统上都无法重现。 您确定您实际使用 exact 命令进行了测试吗?如果您运行sudo tee /etc/some/file,而/etc/some 不存在,则会出现所描述的行为。相比之下,sudo tee /etc/file 是提升用于写入/etc/file 的权限的一种完全合法的方式。我建议在启用set -x 的情况下重现该问题,并将该准确、未经编辑的日志合并到问题中。 啊!感谢您在实际命令中进行编辑;这使得它可以回答。 【参考方案1】:

该问题已被编辑以包含所引入问题的日志,其中包括以下命令:

# Taken from edited question
$ echo 'hello' > sudo tee /data/hello

在 bash 中(允许在简单命令中的任何位置使用重定向运算符),这完全等同于运行:

# From question, with redirection moved to end to make actual behavior more readable
echo 'hello' tee /data/hello > sudo

也就是说,它正在创建一个在你当前目录中命名为sudo的文件,而不是使用sudo来运行tee(在上面,tee只是@的一个参数987654327@).

相比之下,你想要的是:

# CORRECT: Using a pipe, not a redirection
echo 'hello' | sudo tee /data/hello

使用管道 (|) 而不是 >

【讨论】:

【参考方案2】:

如果您想在一个命令行上完成所有操作,您可以通过对其运行 touch(1) 来确保文件存在。例如

sudo touch /etc/file && echo "Some text" | sudo tee /etc/file

【讨论】:

没有必要。 tee 使用O_CREAT 标志打开其输出文件,如果文件不存在,则将创建该文件——如果您愿意,可以使用strace 进行检查。 (并查看 OP 对问题的编辑,添加他们运行的实际命令——这使问题变得清晰)。 是的,这更有意义,谢谢。【参考方案3】:

假设您具有所需的 sudo 权限,您可以使用 vi 或 nano 之类的编辑器

sudo vi /etc/file

sudo nano /etc/file

如果你没有这些程序的 sudo,你可以先 su 到 root,然后尝试:

sudo su -

vi /etc/file

nano /etc/file

【讨论】:

这些不是必需的。 tee确实创建目标文件。 (并查看 OP 对问题的编辑,添加他们运行的实际命令——这使问题变得清晰)。 哈!我确实在那里困惑了一秒钟! :--)

以上是关于我将如何创建一个文本文件并在 bash [重复] 中使用 sudo 权限填充它的主要内容,如果未能解决你的问题,请参考以下文章

在 Bash 中从文本文件创建数组

如何使用for循环将文本文件中的一行字符串作为Bash中另一个脚本的单独变量传递[重复]

删除文本文件bash中的文件扩展名[重复]

bash 无法从文本文件中找到目录 [重复]

如何复制或删除bash中的特定行并将它们创建到新文件中[重复]

在文本文件中将纪元转换为标准的bash脚本[重复]