首页 > 解决方案 > 使用 sed 编辑文件的 bash 脚本不会持续重启

问题描述

我编写了一个脚本来将boot目录从 microSD 卡迁移到 USB 驱动器。这是针对树莓派 4 项目的。作为该脚本的一部分,有两个文件被更新以删除 microSD 引用并使用 USB 拇指驱动器的 UUID 引用。该脚本以sudo. 更新/boot/cmdline.txt/etc/fstab文件的脚本如下:

#!/bin/bash

fCMDLINE=/boot/cmdline.txt
fFSTAB=/etc/fstab

cat $fCMDLINE
sed -i -r -e 's/PARTUUID=([a-z]\S*)/PARTUUID='"$vPARTUUID"'/g' $fCMDLINE
cat $fCMDLINE

cat $fFSTAB
sed -i -r -e 's/PARTUUID=([a-z]\S*)/\/dev\/disk\/by-uuid\/'"$vUUID"'/g' $fFSTAB
cat $fFSTAB

运行整个脚本后,前后文件如下:

CMDLINE FILE

#ORIGINAL
console=serial0,115200 console=tty1 root=PARTUUID=d9b3f436-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

#UPDATED
console=serial0,115200 console=tty1 root=PARTUUID=0b1e4c33-0a73-4c26-aad2-03c1b5fd9266 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

FSTAB FILE

#ORIGINAL
proc            /proc           proc    defaults          0       0
PARTUUID=d9b3f436-01  /boot           vfat    defaults          0       2
PARTUUID=d9b3f436-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

#UPDATED
proc            /proc           proc    defaults          0       0
/dev/disk/by-uuid/5bee13fa-5c62-45b0-91ed-12c544d4b528  /boot           vfat    defaults          0       2
/dev/disk/by-uuid/5bee13fa-5c62-45b0-91ed-12c544d4b528  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

这两个文件的输出都是正确的,并且在替换 UUID 时 sed 命令似乎已按预期执行。但是,当我重新启动树莓派时,原始fstab文件仍然存在并且没有更新。这仅在重新启动后发生。在此之前,文件是正确的,并且一切都按预期安装。

#After Reboot

pi@raspberrypi:~ $ sudo cat /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=d9b3f436-01  /boot           vfat    defaults          0       2
PARTUUID=d9b3f436-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

没关系,但这里有两个具有权限的文件。

/boot/
-rwxr-xr-x 1 root root      191 Dec  8 01:01 cmdline.txt

/etc/
-rw-r--r--  1 root root     314 Sep 26 01:31 fstab

预期的行为将是fstab文件以与文件保持相同的方式保持重新启动cmdline.txt。肯定有一些我只是想念的东西。有什么想法吗?

更新...

我之前没有注意到,但上面的两个文件没有相同的日期 - - 9/26 文件是 Buster (9/26) 图像的原始文件,没有更新。重新启动之前的文件是:

-rw-r--r--  1 root root     382 Dec  8 18:16 fstab

令人费解 - 它让我认为这是一个硬件问题或更深层次的操作系统错误。

标签: bashsedraspberry-pi

解决方案


推荐阅读