bash - 使用 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
令人费解 - 它让我认为这是一个硬件问题或更深层次的操作系统错误。
解决方案
推荐阅读
- orleans - Orleans Observables 与 Streams
- flutter - Flutter Run show Getter not found: 'malloc'. 没有为“VersionInfoQuerier”类定义方法“calloc”
- typescript - 在导出之前展开对象
- r - 通过使用 ggplot 循环列来创建多个带有百分比的饼图
- unity3d - Assets/Script/C2.cs(16,1):错误 CS1022:类型或命名空间定义,或预期文件结尾
- java - 碰撞检测不起作用。Circle和Square在计算后未检测到碰撞
- firebase - TypeError:无法读取未定义错误的属性“应用程序” - Flutter 在 Flutter Web 应用程序中使用 Firebase Auth 和 Firestore
- c# - 有没有人成功在 Ubuntu 18.04 上运行 mipsdk-dotnet-file-quickstart-main?
- c - C 用户定义函数中的数组参数无法通过 sizeof() 正确计算形状
- ruby-on-rails - 刺激反射在生产轨道 6 中停止工作