这个 Bash 脚本是干什么的?

这个 Bash 脚本是干什么的?

理论上,pentoo-installer 中的这个代码片段可以找到所选磁盘上的所有分区,但它找不到我的 sda1 分区,所以我很想理解它并进行修改,以便它能够找到它。

findpartitions() {
    workdir="$PWD"
    for devpath in $(finddisks); do
        disk=$(echo $devpath | sed 's|.*/||')
        cd /sys/block/$disk
        for part in $disk*; do
            # check if not already assembled to a raid device
            if ! [ "$(cat /proc/mdstat 2>/dev/null | grep $part)" -o "$(fstype 2>/dev/null </dev/$part | grep "lvm2")" -o "$(sfdisk -c /dev/$disk $(echo $part | sed -e "s#$disk##g") 2>/dev/null | grep "5")" ]; then
                if [ -d $part ]; then
                    echo "/dev/$part"
                    [ "$1" ] && echo $1
                fi
            fi
        done
    done

    #[ ... more code ...]

    cd "$workdir"
}

谢谢!!

答案1

你需要调试这个一点点。首先,添加 echo 命令来转储流程,并可选地在每个 for 循环和 if 语句之后转储变量。

你可以在打开调试的情况下运行命令? 这将为您提供几乎相同级别的细节,帮助您了解脚本流程实际上在做什么。此外,这篇关于 unix 的文章解释了如何从 bash 提供给我们的调试中获取行号。

相关内容