![Heredoc 无法在 bash 脚本中工作](https://linux22.com/image/197724/Heredoc%20%E6%97%A0%E6%B3%95%E5%9C%A8%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%B7%A5%E4%BD%9C.png)
我制作了一个可以在 Ubuntu mate 中运行的 bash 脚本,但现在它无法在 Manjaro 中运行。此方法失败:
#!/bin/bash
dev_block="/dev/sdb"
createPartitions(){
echo "Creating Partitions on "$dev_block"..."
sfdisk $dev_block -uS <<-EOF
start=63, size=409600, type=c, bootable
start=411648, type=af
EOF
}
createPartitions
我得到这个输出...
Creating Partitions on /dev/sdb...
Checking that no-one is using this disk right now ... OK
Disk /dev/sdb: 28.84 GiB, 30966546432 bytes, 60481536 sectors
Disk model: USB FLASH DRIVE
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EB88C926-F304-6D45-82C8-0BAC5E73A2CB
Old situation:
Device Start End Sectors Size Type
/dev/sdb1 2048 411585 409538 200M EFI System
/dev/sdb2 413633 60481502 60067870 28.6G Apple HFS/HFS+
>>> Created a new GPT disklabel (GUID: 0EBA642D-3CB5-8841-A150-D18AC387D65F).
/dev/sdb1: Failed to add #1 partition: Invalid argument
Leaving.
我还尝试将 EOF 移回来,这样它前面就没有制表符了。
createPartitions(){
echo "Creating Partitions on "$dev_block"..."
sfdisk $dev_block -uS <<-EOF
start=63, size=409600, type=c, bootable
start=411648, type=af
EOF
}
我检查了一下,结束 EOF 后没有制表符或空格。但在 Ubuntu 中,我也不必将结束 EOF 移回去。
我该如何调试这个?也许 sfdisk 在 Arch 中的行为有所不同?
干杯。
答案1
我找到了答案......当我在 Manjaro 中测试代码时,我注释掉了这个必要的方法,该方法在每次运行 sfdisk 命令之前删除驱动器上的分区和文件系统:
wipeFilesystems(){
echo "Wiping filesystems on "$dev_block"..."
sfdisk --delete $dev_block
wipefs --all $dev_block
}