2017-08-21 76 views
0

我想在fstab添加一個條目,我在我的/bin/bash腳本中使用這個命令:管道呼應,尾部和SED導致錯誤輸出

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 

管道有什麼問題?

回答

2

您的第一條線已關閉。您正在管道echo -ntailecho -n不會產生任何輸出,所以你沒有任何管道連接到尾部。

你可以使用echo -n代替添加您的tail | sed命令的輸出:

echo -n $(tail -1 /mnt/etc/fstab | sed 's/\(-\).*/-03/') >> /mnt/etc/fstab 

中包裝tail | sed位爲$()允許回聲採取這些命令的stdout和回聲出結果(不換行作爲希望)回到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

也繼可以幫助你在相同的。

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