Execute-Befehl als string in der Bash
Teste ich ein kurzes bash-Skript. Ich möchte zum ausführen einer Zeichenfolge als Befehl.
#!/bin/bash
echo "AVR-GCC"
$elf=" main.elf"
$c=" $main.c"
$gcc="avr-gcc -mmcu=atmega128 -Wall -Os -o $elf$c"
eval $gcc
echo "AVR-GCC done"
Ich weiß, es ist hässlich und alle, aber sollte es nicht ausführen, die avr-gcc-Befehl?
Die Fehler sind die folgenden:
./AVR.sh: line 4: = main.elf: command not found
./AVR.sh: line 5: = .c: command not found
./AVR.sh: line 6: =avr-gcc -mmcu=atmega128 -Wall -Os -o : command not found
Sie sollten keine dollar-Zeichen linken Seite der Zuweisung: z.B.
elf=" main.elf"
nicht elf=" main.elf
InformationsquelleAutor erbal | 2013-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, was Ihre endgültige Ziel ist, sondern Sie kann stattdessen sollten Sie die folgende robuster Weise: mithilfe von arrays in der bash. (Ich werde nicht zu diskutieren, die mehrere syntax-Fehler haben Sie in Ihrem Skript.)
Nicht setzen Sie Ihre Befehle und Ihre Argumente in einem string hat wie Sie und dann
eval
string (btw, in deinem Fall, das eval ist nutzlos). Ich verstehe dein Skript wie (diese version wird nicht geben Ihnen die Fehler, die Sie genannt haben, vergleichen Sie mit Ihrer version, vor allem es gibt keine dollar-Zeichen für Variablen-Zuweisungen):Wirst du sehr bald Probleme haben, wenn Sie zum Beispiel die Begegnung von Dateien mit Leerzeichen oder lustige Symbole (man denke an eine Datei namens
; rm -rf *
). Stattdessen:Versuchen zu verstehen, was hier Los ist (kann ich klären, bestimmte Punkte werden Sie mich Fragen), und merken, wie viel sicherer es ist, als das Kommando in einem string.
"ich weiß nicht, was dein Ziel ist..." - er hat eine "string" - variable mit einem Befehl und Argumente. Er versucht, um es aufzurufen, wie einen Befehl.
Sicher, aber warum?
Schöne Lösung
InformationsquelleAutor gniourf_gniourf
Sie nicht verwenden die dollar-Augen, wenn Variablen anlegen, nur beim Zugriff darauf.
So ändern
zu
InformationsquelleAutor Some programmer dude