Bevor ich auch noch meine verbliebenen Haare ausraufe, stelle ich hier mal eine Frage zur bash-Programmierung.
Im Projekt "Dokumentation für raspiBackup" habe ich Tools gebaut, die den Autoren etwas unter die Arme greifen sollen.
Bei einem der Tools nutze ich leider noch eval, welches ich gerne loswerden möchte.
Nach vielen vergeblichen Versuchen, die bash zur Mitarbeit zu überreden, habe ich hier ein Minimalbeispiel gebaut:
#!/usr/bin/env bash
edit_by_status() {
eval "${EDIT_IN_TABS}" file1 file2 # funktioniert, der jeweilige Editor wird mit den zwei Dateien aufgerufen
# funktionieren nicht:
# "${EDIT_IN_TABS}" file1 file2 # + 'vim -p' file1 file2 ==> bash: vim -p: Befehl nicht gefunden...
# ${EDIT_IN_TABS} file1 file2 # + 'vim -p' file1 file2 ==> bash: vim -p: Befehl nicht gefunden...
}
alias xbs='EDIT_IN_TABS="nano" edit_by_status'
alias ybs='EDIT_IN_TABS="vim -p" edit_by_status'
alias xbs
alias ybs
Display More
Das Script soll gesourced werden, so dass die Aliase (und im Original weitere Dinge) in der aktuellen Shell aktiv sind/werden.
Also:
Damit werden dann die beiden Aliase xbs und ybs aktiv.
Das Problem tritt auf bei ybs, weil dort bei EDIT_IN_TABS="vim -p" ein Leerzeichen enthalten ist.
Dieses wird beim Verzicht auf eval nicht wunschgemäß verarbeitet und führt zum Fehler bash: vim -p: Befehl nicht gefunden..., weil nicht vim -p, sondern 'vim -p' aufgerufen wird.
Wie geht es richtig? Ich sehe den Wald vor lauter Bäumen nicht mehr.
Vermutlich ist das für Bash-Gurus einfach zu lösen, deshalb frage ich ja hier.