我想在fstab
中添加一个条目,我在/bin/bash
脚本中使用此命令:
echo -n | tail -1 /mnt/etc/fstab | sed 's/\(-\).*/-03/' >> /mnt/etc/fstab
echo -e -n "\t" >> /mnt/etc/fstab
echo -n "/home" >> /mnt/etc/fstab
echo -e -n "\t" >> /mnt/etc/fstab
echo -n "ext4" >> /mnt/etc/fstab
echo -e -n "\t" >> /mnt/etc/fstab
echo -n "default,noatime" >> /mnt/etc/fstab
echo -e -n "\t" >> /mnt/etc/fstab
echo -n "0" >> /mnt/etc/fstab
echo -e -n "\t" >> /mnt/etc/fstab
echo "2" >> /mnt/etc/fstab
这是原始内容:
proc /proc proc defaults 0 0
PARTUUID=ee397c53-01 /boot vfat defaults 0 2
PARTUUID=ee397c53-02 / ext4 defaults,noatime 0 1
这是预期的输出:
proc /proc proc defaults 0 0
PARTUUID=ee397c53-01 /boot vfat defaults 0 2
PARTUUID=ee397c53-02 / ext4 defaults,noatime 0 1
PARTUUID=ee397c53-03 /home ext4 defaults,noatime 0 2
而是输出如下:
proc /proc proc defaults 0 0
PARTUUID=ee397c53-01 /boot vfat defaults 0 2
PARTUUID=ee397c53-02 / ext4 defaults,noatime 0 1
PARTUUID=ee397c53-03
/home ext4 default,noatime 0 2
管道有什么问题?
答案 0 :(得分:2)
你的第一行已关闭。您将echo -n
与tail
联系起来。 echo -n
没有产生任何输出,所以你没有任何东西可以拖尾。
您可以使用tail | sed
替代echo -n
命令的输出:
echo -n $(tail -1 /mnt/etc/fstab | sed 's/\(-\).*/-03/') >> /mnt/etc/fstab
将tail | sed
位包装到$()
允许echo接收这些命令的标准输出并将结果(根据需要没有换行)回显到fstab。
或者,您可以使用xargs
来管道回显,以便它可以从标准输入读取。
tail -1 /mnt/etc/fstab | sed 's/\(-\).*/-03/' | xargs echo -n >> /mnt/etc/fstab
此外,您可以使用printf
来完成整个脚本:
printf "%s\t%s\t%s\t%s\t%s\t%s\n", $(tail -1 /etc/fstab | sed 's/\(-\).*/-03/') "/home" "ext4" "default,noatime" "0" "2"
答案 1 :(得分:1)
以下也可以帮助你。
awk -F'[- ]' 'END{val=sprintf("%02d",$2+1);print $1"-"val," /home ext4 defaults,noatime 0 2"}' Input_file
如果您对上面的awk结果感到满意,那么您也可以使用以下命令保存结果。
awk -F'[- ]' '1;END{val=sprintf("%02d",$2+1);print $1"-"val," /home ext4 defaults,noatime 0 2"}' Input_file > tmp && mv tmp Input_file