我将如何创建一个文本文件并在 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 权限填充它的主要内容,如果未能解决你的问题,请参考以下文章
如何使用for循环将文本文件中的一行字符串作为Bash中另一个脚本的单独变量传递[重复]