/bin/bash angeblich nicht gefunden

Ich habe auf meinem PC (Manjaro mit xfce Desktop) in meinem $HOME/bin ein bash Skript “Datsich-AD.sh”. In der 1. Zeile steht der Shebang #!/bin/bash. Im xfce4-Terminal kann ich das Skript z.B. aufrufen mit

cd ~/bin
./Datsich-AD.sh

Das Skript habe ich auf einen anderen PC übertragen, dort läuft auch Manjaro mit xfce als Desktop. Ich habe das Skript dort auch in mein $HOME/bin getan. Wenn ich es auf die gleiche Weise dort starte, dann erscheint die Meldung:

Zeile 1: /bin/bash nicht gefunden

Das Skript läuft dennoch durch!

Wenn ich allerdings den Aufruf in die login-Startprogramme eintrage:

/usr/bin/xfce4-terminal -e /home/jaro/bin/Datsich-AD.sh

dann führt das zu dem Fehler:

Ausführen Kindprozess fehlgeschlagen. failed to execve: Datei oder Vz nicht gefunden

Dann wird das Skript nicht ausgeführt.

Ich meine, ich muss das erste Problem lösen, dann wird das 2. verschwinden.

Aber wie?

Hallo @jolexin :wink:

Also das “#” ist ja das Zeichen für einen Kommentar und deswegen wird es nicht interpretiert und sollte auch erst gar nicht ausgegeben werden:

Ich vermute dann eher, dass das “’#!” Anfang fehlt.

Wenn ich das hier schreibe:

!/bin/bash

dann gibt er mir auch etwas ähnliches aus:

./test.sh: Zeile 1: !/bin/bash: Datei oder Verzeichnis nicht gefunden

Wenn ich das “!” weglasse, wechselt es von Zsh nach Bash bei mir.

Also ich denke im Script liegt der Fehler.

1 Like

Dann poste hier mal Dein Skript !

Kann es sein, dass auf dem anderen Rechner eine “andere” shell läuft ?

eventuell hilft dir ja chsh -l :

prompt> chsh -l                                                        
/bin/sh
/bin/bash
/bin/zsh
/usr/bin/zsh
/usr/bin/git-shell

Da sollte /bin/bash dann auf dem anderen PC auch mit aufgelistet sein.

Wenn das script portabel sein soll, ist aber eventuell #!/bin/sh als shebang besser. Das ist normalerweise ein Link auf die vorhandene shell.

prompt> ls -lA /bin/sh                                                 
lrwxrwxrwx 1 root root 4  4. Mai 18:08 /bin/sh -> bash

Oder noch besser: #!/usr/bin/env bash

Das hilft, wenn die bash woanders ist, aber nicht, wenn die bash gar nicht da ist :slight_smile:

Davon bin ich jetzt nicht ausgegangen. Gibt es (moderne :wink:) Systeme bei denen bash nicht installiert ist?

Im embedded Bereich gibt es noch sehr oft Systeme ohne Bash.

Wenn ein System Systemd verwendet, gibt es die Bash. Wenn es kein Systemd gibt, gibt es manchmal auch keine Bash. Das ist bestimmt nicht allgemeingültig, aber im embedded Bereich passt es oft.

Gilt natürlich nicht für so Hobby System wie Manjaro ARM.

Na gut, natürlich gibt’s Ausnahmen. Hier geht es aber nicht um embedded, ARM oder alpine, sondern um ein Desktop-System, noch dazu Manjaro und Xfce, dessen Standardshell Bash ist.

Ich gehe auch davon aus, dass das (die? der?) Shebang nicht auf die korrekte Datei zeigt. Gibt es denn die Datei?

Anstatt ./datei.sh kannst du auch bash datei.sh eingeben.

Keruskerfrust schlägt vor

Dann poste hier mal Dein Skript !

Also 1. das Skript:
#!/bin/bash
# Eintrag in den Startup Programmen: /usr/bin/xfce4-terminal -e /home/andrej/bin/Datsich-Doku.sh

home_pfad=/home/andrej
# Befehl in den Startprogrammen: /usr/bin/xfce4-terminal -e $HOME/bin/Datsich-Doku.sh

sicherungs_geraet_pfad=/run/media/andrej/My_Passport
wohin_sichern=$sicherungs_geraet_pfad/Datsich-Dokus/2021-05-mit-duplicity
welchen_ordner=$home_pfad

echo ***debug# home_pfad $home_pfad ###debug###
echo ***debug# sicherungs_geraet_pfad $sicherungs_geraet_pfad ###debug###
echo ***debug# welchen_ordner $welchen_ordner ###debug###
echo ***debug# wohin_sichern $wohin_sichern ###debug###

wohin_prefix="file://"

echo ***debug# wohin_prefix $wohin_prefix ###debug###

Sich_optionen="incremental --no-encryption --exclude-other-filesystems --exclude=/home/andrej/.cache --exclude=/home/andrej/.local/share/Trash"

Sich_Log=$home_pfad/Dokumente/PC-Verwaltg/Datsich-Dokus.log
duplicity_kdo_AD=" $Sich_optionen $welchen_ordner $wohin_prefix$wohin_sichern" 
echo  ***debug# duplicity_kdo_AD: $duplicity_kdo_AD  ###debug###

echo "********************** Jüngste Sicherungen von $welchen_ordner *****************************"
tail $Sich_Log
echo "**********************"
echo "Daten in $welchen_ordner"
echo "      jetzt sichern nach" 
echo "$wohin_sichern ?"
echo "Externe Festplatte eingesteckt und geöffnet y|n?"
read ANTWORT
if [ "$ANTWORT" != "y" ]
  then
    echo "Dann heute keine Daten-Sicherung"
  else
    duplicity  $duplicity_kdo_AD  
    date +"%a %Y-%m-%d %H:%M" >> $Sich_Log
    tail $Sich_Log
    echo "**********************************"
fi
################################
echo "Fertig (Eingabe)"
read Antwort
exit

2. Die Umgebung:

[andrej@medion bin]$ pwd
/home/andrej/bin

[andrej@medion bin]$ ls -l
insgesamt 28
-rwxr-xr-x 1 andrej andrej 2383  1. Jun 19:10 Datsich-Doku.sh

[andrej@medion bin]$ echo $PATH
/home/andrej/bin:/home/andrej/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin

[andrej@medion bin]$ cd /bin
[andrej@medion bin]$ ls -la bash*
-rwxr-xr-x 1 root root 952720  4. Mai 18:08 bash

3. Ablaufprotokoll

[andrej@medion bin]$ ./Datsich-Doku.sh
./Datsich-Doku.sh: Zeile 1: #!/bin/bash: Datei oder Verzeichnis nicht gefunden
***debug# home_pfad /home/andrej
***debug# sicherungs_geraet_pfad /run/media/andrej/My_Passport
***debug# welchen_ordner /home/andrej
***debug# wohin_sichern /run/media/andrej/My_Passport/Datsich-Dokus/2021-05-mit-duplicity
***debug# wohin_prefix file://
***debug# duplicity_kdo_AD: incremental --no-encryption --exclude-other-filesystems --exclude=/home/andrej/.cache --exclude=/home/andrej/.local/share/Trash /home/andrej file:///run/media/andrej/My_Passport/Datsich-Dokus/2021-05-mit-duplicity
********************** Jüngste Sicherungen von /home/andrej *****************************
Di 2021-05-25 16:29
Di 2021-05-25 18:33
Di 2021-05-25 18:44
Di 2021-05-25 19:10
Di 2021-05-25 19:42
Fr 2021-05-28 10:26
Fr 2021-05-28 10:34
Fr 2021-05-28 10:42
Di 2021-06-01 18:31
Di 2021-06-01 19:07
**********************
Daten in /home/andrej
      jetzt sichern nach
/run/media/andrej/My_Passport/Datsich-Dokus/2021-05-mit-duplicity ?
Externe Festplatte eingesteckt und geöffnet y|n?
(abgebrochen)

Schau dir mal die Datei in einem Hex Editor an oder verwende deinen Lieblings-Editor und lass dir alle Zeichen anzeigen, falls der das kann.

Ich würde sagen in der ersten Zeile gibt es nicht sichtbare Zeichen vor dem # . Im Hex Editor sollte es mit 23 21 losgehen. Falls es nicht am Anfang ist kann es auch noch irgendwo mittig in der Zeile sein.

Alternativ mal mit einer neuen Datei versuchen und erst ab Zeile 3 alles kopieren und die erste Zeile von Hand schreiben.

btw., war das extra oder ein versehen das du genau diese Formatierung verwendet hast. (Die ersten 2 Zeilen nicht im Codeblock.)

xabbu hatte den zutrefffenden Verdacht! Da waren vor dem # in der ersten Zeile 2 unsichtbare Zeichen. Jetzt kommt die Fehlermeldung nicht mehr.