Bash 附加到受保护的文件而不创建新行

Bash 附加到受保护的文件而不创建新行,bash,Bash,我正在尝试创建一个bash脚本,其中包括将字符串“fastboot noswap ro”附加到/boot/cmdline.txt的末尾 起初,我尝试sudo-echo“fastboot-noswap-ro”>/boot/cmdline.txt,但获得的权限被拒绝 我了解到,对于受保护的文件,最好的方法是echo'fastboot noswap ro'| sudo tee-a/boot/cmdline.txt 这是可行的,但它使它从一条新的线路开始。我在tee手册页中找不到任何关于在不插入新行的情

我正在尝试创建一个bash脚本,其中包括将字符串“fastboot noswap ro”附加到/boot/cmdline.txt的末尾

起初,我尝试
sudo-echo“fastboot-noswap-ro”>/boot/cmdline.txt
,但获得的权限被拒绝

我了解到,对于受保护的文件,最好的方法是
echo'fastboot noswap ro'| sudo tee-a/boot/cmdline.txt

这是可行的,但它使它从一条新的线路开始。我在tee手册页中找不到任何关于在不插入新行的情况下追加的内容


如何在不创建新行的情况下附加到此受保护的文件?

您不能。换行符已经存在,您不能通过追加来删除内容

相反,您必须用更改的行替换文件的内容

最简单的方法可能是
sed

sudo sed -i -e 's/$/ fastboot noswap ro/' /boot/cmdline.txt
或粘贴:

paste /boot/cmdline.txt <(echo fastboot noswap ro) | sudo tee /boot/cmdline.txt

paste/boot/cmdline.txt您不能。换行符已经存在,您不能通过追加来删除内容

相反,您必须用更改的行替换文件的内容

最简单的方法可能是
sed

sudo sed -i -e 's/$/ fastboot noswap ro/' /boot/cmdline.txt
或粘贴

paste /boot/cmdline.txt <(echo fastboot noswap ro) | sudo tee /boot/cmdline.txt
paste/boot/cmdline.txt尝试以下操作:

echo -n ' fastboot noswap ro' | sudo tee -a /boot/cmdline.txt
男子回声说

试试这个:

echo -n ' fastboot noswap ro' | sudo tee -a /boot/cmdline.txt
男子回声说


使用
tee
我怀疑你能做到。在子shell中执行
echo“…”>…
并在整个子shell中执行sudo如何?如果文件末尾已经有换行符,则必须将其删除first@AlbinPaul没有。我看到如果我多次重复该命令,它会自动插入一个换行符。@John3136,因此我的第一次尝试使用了
echo“…”>…
,但我不会“在子shell中并在整个子shell上执行sudo”。
echo
会在文本后自动插入换行符,这就是你在反复运用你的命令时所看到的。文件本身已经有了一个换行符,因为
echo
不会在文本之前插入换行符,
tee
根本不会添加换行符,因此对它的唯一解释是在命令之前就存在(另外,因为UNIX将一行定义为以换行符结尾的字符序列,所以从UNIX的角度来看,不以换行符结尾的文本文件是有缺陷的)。使用
tee
我怀疑您是否可以。如何执行
echo“…”>>…
在子shell中,并在整个子shell上执行sudo?如果文件末尾已经有换行符,则必须将其删除first@AlbinPaul,它没有。我看到如果我多次重复该命令,它会自动插入一个换行符。@John3136,所以我的第一次尝试使用了
echo“…”>…
,但我没有跟随“在子shell中,在整个子shell上执行sudo".
echo
会自动在文本后插入换行符,因此在重复应用命令时会看到这一点。文件本身已经有了一个换行符,因为
echo
不会在文本前插入换行符,
tee
根本不会添加换行符,因此对它的唯一解释是在您的命令之前就已经存在了(另外,因为UNIX将一行定义为以换行符结尾的字符序列,所以从UNIX的角度来看,不以换行符结尾的文本文件是有缺陷的)。