1.8. Sprawdzenie, czy powłoka pracuje w trybie interaktywnym

Problem

Dysponujemy kodem, który powinien być uruchamiany tylko w przypadku pracy powłoki w trybie interaktywnym lub w trybie nieinteraktywnym.

Rozwiązanie

Należy wykorzystać instrukcję case o następującej treści:

#!/usr/bin/env bash
# nazwa pliku receptury:  interaktywnosc

case "$-" in
    *i*)  #Kod powłoki interaktywnej
          ;;
    *)    #Kod powłoki nieinteraktywnej
          ;;
esac

Analiza

Zmienna $- przechowuje ciąg tekstowy wszystkich bieżących opcji powłoki. Jeżeli wśród nich występuje opcja i, powłoka pracuje w trybie interaktywnym.

Można również zastosować skrypt przedstawiony poniżej, ale metoda opisana wcześniej jest rozwiązaniem zalecanym.

if [ "$PS1" ]; then echo Powłoka pracuje w trybie interaktywnym else ...

Get Bash. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.