Heredoc 無法在 bash 腳本中運作

Heredoc 無法在 bash 腳本中運作

我製作了一個可以在 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

}

相關內容