staging.inyokaproject.org

[bash] – Empfehlungen für die Behandlung mutlipler Argumente erbeten

Status: Ungelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

Acamat

Avatar von Acamat

Anmeldungsdatum:
23. September 2011

Beiträge: Zähle...

Hallo,

mir ist vor einigen Tagen ein ärgerlicher Unfall mit rm passiert. Ein von mir erstelltes, fehlerhaftes Skript hat versehentlich eine Datei gelöscht, an der ich längere Zeit gearbeitet habe. Leider habe ich keine Sicherung, weil es sich nur um kurzfristiges Projekt außerhalb der normalen Projekte handelt. Ich habe mir also folgendes vorgenommen:

Ein Skript mit dem Namen rm, das über .bash_alias den Aufruf von rm überschreibt. Es soll standardmäßig statt rm das Programm rmw aufrufen. Ich kann aber die Option -f verwenden, dann wird rm -i aufgerufen. Bei Angabe eines Verzeichnisses passiert die gleiche Semantik. Soweit kein Problem.

Nun zu meiner eigentlichen Frage. rm akzeptiert eine Mehrfach-Angabe von Dateien und ich frage mich, wie ich diese elegant in meinen Skript verarbeite. Ich dachte daran, ein Array aus den Dateinamen zu erstellen und diese „in einem Rutsch“ an rm weiterzugeben, weiß allerdings nicht so genau, wie ich das anstelle. Da ich nur mäßig bewandert in der bash-Programmierung bin, erbitte ich um eine Empfehlung.

In meinen Skripten werde ich natürlich den direkten Aufruf von rm bzw. rmw verwenden.

– LG, Carsten

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Das ginge so:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh

error() { echo "ERROR: $*" >&2; exit 1; }

unset force

while getopts ':f' opt; do
  case "$opt" in
  f)    force=yes
        ;;
  :)    error "missing parameter to $OPTARG"
        ;;
  \?)   error "unknown option: $OPTARG"
        ;;
  esac
done

shift $((OPTIND - 1))

if [ -n "$force" ]; then
  rm -i "$@"
else
  echo "Attempted to delete: $*"
fi

Zeile 21 beantwortet Deine Frage.

Acamat

(Themenstarter)
Avatar von Acamat

Anmeldungsdatum:
23. September 2011

Beiträge: Zähle...

Das sieht ja richtig elegant aus; danke Dir sehr. Ich werde mich eingehend damit beschäftigen; einiges ist neu für mich. Noch eine kleine Frage. Du verwendest sh, ich verwende bei meinen Skripts bash. Sind diese Interpreter diesbezüglich kompatibel?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Acamat schrieb:

Das sieht ja richtig elegant aus; danke Dir sehr.

Bittesehr.

Ich werde mich eingehend damit beschäftigen; einiges ist neu für mich.

Falls etwas unklar ist, einfach fragen.

Noch eine kleine Frage. Du verwendest sh, ich verwende bei meinen Skripts bash. Sind diese Interpreter diesbezüglich kompatibel?

Ja. Ich bevorzuge die sh, weil die tendenziell weiter verbreitet ist (dürfte bei heutigen Linux-Systemen aber keinen Unterschied machen, da eigentlich alle die bash standardmäßig nutzen), die bash mal langsamer war, weil sie mehr tun muss, und aus der sportlichen Herausforderung mit weniger zurecht zu kommen. ☺ Die bash nutze ich nur, wenn ich wirklich Arrays brauche, was erstaunlich selten vorkommt (wenn man mal $@ außen vor lässt).

Antworten |