Busybox-Merkwürdigkeiten

Kann sich jemand dieses verhalten der Shell ash der Busybox erklären?

http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090307_busybox_ash.png

Zweimal wird mit Backticks die Ausgabe eines Befehls in eine Variable eingelesen. Einmal ein simples echo, einmal ein ganzes Script, das ein paar verschachtelte if und case hat. Beim einfachen echo evaluiert grep korrekt zu true, beim Script nicht.

Ich habe jetzt einen Workaround, bei dem ich nicht per Übergabe eines Parameters die Startup-Scripte sagen lasse, was sie tun, sondern verwende speziell formatierte Kommentare, die ich direkt greppe. Das ganze ist Teil eines etwas umfangreicheren, modularen Mini-Linux, an dem ich gerade arbeite — mehr dazu in den nächsten Tagen.

Wer mit meinem Build der Busybox spielen möchte: busybox-1.13.2-static-ulibc-i686.tar.gz

One thought on “Busybox-Merkwürdigkeiten

  1. Martin

    Hmm, hast du mal probiert, die beiden Outputs in eine Datei umzuleiten anstatt sie in die Umgebungsvariable provides zu schreiben, und sie dann wirklich byteweise zu vergleichen? Eventuell ist da tatsächlich ein Newline zu viel / zu wenig, was dir mit dem echo -$provides- einfach nicht angezeigt wird. Folgendes Verhalten zeigt jedenfalls die Bash:

    martin@thrace:~$ provides=”` echo -n earlynet `”
    martin@thrace:~$ echo -$provides-
    -earlynet-
    martin@thrace:~$ provides=”` echo earlynet `”
    martin@thrace:~$ echo -$provides-
    -earlynet-
    martin@thrace:~$ echo earlynet > /tmp/1.tmp
    martin@thrace:~$ echo -n earlynet > /tmp/10.tmp
    martin@thrace:~$ ls /tmp/1*.tmp -lah
    -rw-r–r– 1 martin martin 8 2009-03-17 13:40 /tmp/10.tmp
    -rw-r–r– 1 martin martin 9 2009-03-17 13:40 /tmp/1.tmp

Comments are closed.