Probé un código de unix.com , modificándolo para que actúe como un selector de dispositivo.
#!/bin/bash count=0 for device in `fdisk -l | sed -n '/^[/]/p' | awk '{print $1}'` do count=$((count+1)) dev[$count]=$device echo "$count: $device" done echo "Select volume (numbers 1-$count):" read selected_number selected_device=$dev[$selected_number] echo "The device you selected is: $selected_device" por alguna razón, la línea selected_device=$dev[$selected_number] no funciona como se esperaba. Me imagino que cometí un error de sintaxis de principiante.
la salida que da es
1: /dev/nvme0n1p1 2: /dev/nvme0n1p2 3: /dev/nvme0n1p3 4: /dev/nvme0n1p4 5: /dev/nvme0n1p5 6: /dev/nvme0n1p6 7: /dev/nvme0n1p7 8: /dev/mmcblk0p1 Select volume (numbers 1-8): 5 The device you selected is: [5] mientras que esperaría algo como The device you selected is: /dev/nvme0n1p5
(Estoy ejecutando el script como sudo, por cierto)
Gracias de antemano por tu ayuda.
Algo como esto,
#!/usr/bin/env bash count=0 for device in `fdisk -l | sed -n '/^[/]/p' | awk '{print $1}'`; do count=$((count+1)) dev[$count]=$device printf '%s: %s\n' "$count" "$device" done read -rp "Select volume (numbers 1-$count): " selected_number printf 'The device you selected is: %s\n' "${dev[$selected_number]}" Aunque sugiero usar un ciclo while + read con Process Substitution.
while IFS= read -r device; do count=$((count+1)) dev[$count]=$device printf '%s: %s\n' "$count" "$device" done < <(fdisk -l | sed -n '/^[/]/p' | awk '{print $1}') También la parte sed y awk pueden ser solo una awk
fdisk -l | awk '/^[/]/{print $1}'