2017-08-21 6 views
0

Je veux ajouter une entrée dans fstab et j'utilise cette commande dans mon script /bin/bash:écho tuyauterie, la queue et sed conduit à la mauvaise sortie

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 

c'est le contenu original:

proc     /proc   proc defaults   0  0 
PARTUUID=ee397c53-01 /boot   vfat defaults   0  2 
PARTUUID=ee397c53-02/    ext4 defaults,noatime 0  1 

et ceci est le résultat attendu:

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 

au lieu de la sortie est le Follo aile:

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 

Qu'est-ce qui ne va pas dans la tuyauterie?

Répondre

2

Votre première ligne est désactivée. Vous acheminez echo -n vers tail. echo -n ne produit pas de sortie, donc vous ne faites rien à la queue.

Vous pouvez ajouter la sortie de votre commande tail | sed à l'aide echo -n à la place:

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

Envelopper le bit tail | sed en $() permet l'écho de prendre la sortie standard de ces commandes et écho les résultats (sans l'alimentation de ligne désiré) retour dans fstab.

Vous pouvez également utiliser xargs pour acheminer l'écho afin qu'il puisse lire à partir de stdin.

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

En outre, vous pouvez utiliser printf pour faire tout le script:

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

suivant peut également vous aider dans la même.

awk -F'[- ]' 'END{val=sprintf("%02d",$2+1);print $1"-"val," /home   ext4 defaults,noatime 0  2"}' Input_file 

Si vous êtes satisfait du résultat de above awk, vous pouvez également enregistrer les résultats avec la commande suivante.

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