pushd und popd nicht gefunden

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Ich versuche gerade ein automatisches Backup-Script einzurichten, habe dafür auch die Anleitung hier durchgelesen, aber komischerweise funktionieren ein paar der Befehle nicht bei mir. Ich habe eine ganz normale Noobs/Raspbian Installation, also sollte es doch kein Problem sein.
    Ich hab auch schon kontrolliert das die Zeilenenden richtig sind, aber da ich das Script mit nano per ssh Session direkt auf dem RPi geschrieben habe, sollte das ja eigentlich kein Problem sein.

    Selbst ein kleines Script zum testen funktioniert nicht:

    Bash
    #!/bin/bash
    BACKUP_PATH="/home/pi/backup"
    pushd
    ls -l
    popd

    Gibt mir die Ausgabe das pushd und popd nicht gefunden werden kann. Finde den Fehler aber nicht!

    Code
    pi@ExperiPi ~ $ nano test.sh
    pi@ExperiPi ~ $ chmod +x test.sh
    pi@ExperiPi ~ $ sh test.sh
    test.sh: 3: test.sh: pushd: not found
    insgesamt 40104
    ......... (ls Ausgabe)
    test.sh: 5: test.sh: popd: not found
    pi@ExperiPi ~ $

  • Gibt mir die Ausgabe das pushd und popd nicht gefunden werden kann. Finde den Fehler aber nicht!

    ich finde nicht mal pushd und popd

    root@wheezypi:~# find / -name pushd
    root@wheezypi:~# find / -name shutdown
    /sbin/shutdown
    root@wheezypi:~# find / -name popd
    root@wheezypi:~#

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hi,

    Jop,
    pushd und popd sind eigentlich keine Programme sondern "Shell builtins" (´type -a pushd´).
    Eine Übersicht über alle von der bash definierten builtins bekommt man mit

    Code
    man builtins


    Das sind mehr als man denken würde :)

    builtins besitzen auch keine manpages dafür ist soweit ich weiß "help" da. (oder die builtins manpage)

    Code
    help pushd

    --------------------------------
    Das er pushd und popd im Testskript nicht finden kann liegt daran dass das Skript in diesem Fall nicht wie gewollt von der bash sondern von der sh(dash) ausgeführt/interpretiert wird. Und dass auch wenn im Shebang die bash angegeben wurde. Die dash kennt aber keine bash builtins :)

    Code
    sh test.sh

    Wenn dann also z.b. so:

    Code
    bash test.sh

    Da du aber in der ersten Zeile ja den Shebang angegeben hast brauchts das sh bzw. bash vor dem test.sh nicht und du kannst das Skript wenn es auch auführbar ist und sich im gleichen Verzeichniss befindet so aufrufen:

    Code
    ./test.sh

    Hier findest du eigentlich alles was du dazu beachten musst. (Abschnitt: "Allgemein zu Scripts")
    --------------------------------

    Mit pushd/popd kenn ich mich zwar nicht genau aus aber wenn ich das richtig verstanden habe wird pushd und popd so nicht funktionieren da du pushd nichts übergibst dass es auf den Verzeichniss Stapel legen soll. Und wenn nichts auf dem Stapel liegt kannst du auch mit popd nichts davon herunter nehmen.

    pushd/popd hab ich jetzt ehrlich gesagt noch nie in einem Skript gesehen. :huh:
    Dafür gibts doch bestimmt eine besser Lösung. :)

    Was hätte denn das Beispielskript eigentlich machen sollen?

    DON'T PANIC!

    Einmal editiert, zuletzt von joh.raspi (25. November 2014 um 06:31)

  • Ich wusste doch das es was ganz blödes ist, was ich da falsch mache.
    Danke, hab mir schon die Haare gerauft, aber klar, wenn man es mit sh aufruft, wird es auch damit interpretiert...

    Ja, habe den Parameter von pushd vergessen.
    Es sind recht praktische Befehle, denn mit push kommt man in irgend ein anderes Verzeichnis und muss sich keine sorgen machen wo man vorher war, brauch sich das nicht auf einer Variablen merken oder sowas, denn mir popd kommt man immer zum Ausgangspunkt zurück.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!