2017-08-21 7 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 

代わりに出力がfolloですウィング:

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 -ntailに配管しています。 echo -nは出力を生成しないので、尾を引くことはありません。

代わりecho -nを使用してtail | sedコマンドの出力を追加することができます:$()tail | sedビットをラッピング

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

は、これらのコマンドの標準出力を取り、結果をエコーするエコーができます(改行なしとして希望)をfstabに戻します。

また、TO_DELから読み込むことができるように、TOエコーをパイプするのに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