Sådan afgør du programmatisk om et bash-script kører på en bærbar eller stationær computer

Er der en pålidelig måde at afgøre programmatisk fra et bash-script, om det kører på en bærbar eller en stationær computer, uden at spørge brugeren?

Der er flere pålidelige metoder til programmatisk at afgøre, om et bash-script kører på en bærbar eller stationær computer, såsom kontrol af batterioplysninger, DMI/SMBIOS data, ACPI oplysninger, brug af lshw og kontrol af PCI-enheder.

Er der en pålidelig måde at afgøre programmatisk fra et bash-script, om det kører på en bærbar eller en stationær computer, uden at spørge brugeren?

Ja, der er flere metoder til programmatisk at afgøre, om et bash-script kører på en bærbar eller en stationær computer. Her er nogle pålidelige metoder:

1. Kontrol af batterioplysninger

Bærbare computere har typisk batterier, mens stationære computere ikke har det. Du kan kontrollere tilstedeværelsen af et batteri ved hjælp af følgende kommando:

if [ -d /sys/class/power_supply/BAT0 ]; then
    echo "Bærbar computer"
else
    echo "Stationær computer"
fi

2. Kontrol af DMI/SMBIOS data

Du kan bruge dmidecode kommandoen til at hente systeminformation og afgøre, om det er en bærbar eller stationær computer. Dette kræver root-adgang:

sudo dmidecode -t system | grep -i "Product Name"

Typisk vil produktnavnet indeholde oplysninger, der kan indikere, om det er en bærbar eller stationær computer.

3. Kontrol af ACPI oplysninger

ACPI (Advanced Configuration and Power Interface) kan også give oplysninger om systemtypen:

if grep -q "Battery" /proc/acpi/battery/*/info 2>/dev/null; then
    echo "Bærbar computer"
else
    echo "Stationær computer"
fi

4. Brug af lshw

Du kan bruge lshw (list hardware) kommandoen til at få detaljeret hardwareinformation:

sudo lshw -class system | grep -i "product"

Produktnavnet kan give en indikation af, om det er en bærbar eller stationær computer.

5. Kontrol af PCI-enheder

Bærbare computere har ofte specifikke PCI-enheder, som stationære computere ikke har, såsom integrerede trådløse kort:

if lspci | grep -i "wireless"; then
    echo "Bærbar computer"
else
    echo "Stationær computer"
fi

Ved at kombinere flere af disse metoder kan du øge nøjagtigheden af din bestemmelse.