Shell-Skript kann unter Linux auf Befehl nicht ausgeführt werden


0

Wenn ich einen Linux "at" -Befehl ausführe, wird das Shell-Skript des Benutzers nicht ausgeführt. Beispielsweise schreibe ich den folgenden Code in mein Skript

 #!/bin/csh  #or #!/bin/bash
 echo "Now will excute a shell script"
 dir=`pwd`
 my_path=`/home/Jim`

Wenn ich das Skript in der Befehlszeile ausführe, funktioniert es einwandfrei.

Während ich das mit dem Befehl "at" ausführe, wird die folgende Meldung angezeigt

Nun wird ein Shell-Skript ausgeführt dir = / home / Jim / Desktop: Befehl nicht gefunden my_path = "/ home / Jim": Befehl nicht gefunden

Ich habe viele Male versucht, kann aber jetzt noch arbeiten

Bitte jeder kann mir helfen, dieses Problem zu beheben. Vielen Dank und Grüße!


1
wie benutzt du bei?
Archemar

bash und csh sind "! =", hat Ihr Skript wirklich beide oben? Ist es ein Bash-Skript oder ein CSH-Skript? (Sind einfache Anführungszeichen und Backticks in bash & csh gleich?)
Xen2050

Ich meine, wenn Sie #! / Bin / csh oder #! / Bin / bash verwenden, werden beide Fehlerinformationen angezeigt.
Liuwei.Shi

Antworten:


1

Wenn Sie Backticks in der Shell oder in einem Skript verwenden, wird versucht, den Inhalt so auszuführen, als wäre es ein Programm.

Diese Zeile versucht, das genannte Programm auszuführen /home/Jim, aber ich glaube, nach dem, was ich aus Ihrer Frage herausholen kann, ist dies Ihr Ausgangsverzeichnis, kein ausführbares Programm. Sie müssen also mit ziemlicher Sicherheit die /home/JimAnführungszeichen und nicht die Backticks (`) setzen.

my_path=`/home/Jim`

Sein Fehler zeigt, dass /home/Jimdoppelte Anführungszeichen und es scheint, was auch immer dies atist, läuft dir=/home/Jim/Desktopund my_path="/home/Jim"als Befehle
Tom Yan

Schau dir seinen Fehler genauer an. Es wurde kein Befehl gefunden . Sie erhalten nicht einen Befehl nicht gefunden Fehlermeldung , wenn eine Zeichenkette in eine Variable zu speichern versuchen. Leider war die Formatierung der OP-Frage irgendwie durcheinander, daher kann ich das nicht mit 100% iger Sicherheit sagen, aber mir scheint es sehr wahrscheinlich, dass er Backticks anstelle von Anführungszeichen hat.
Zoredache

Du hast mich misverstanden. Ich meine, die atganzen Zeilen werden als Befehle behandelt, als ob dir=/home/Jim/Desktopund my_path="/home/Jim"als Programme.
Tom Yan

Oh, at ist ein Tool, mit dem Sie Ihren Befehl zu einem späteren Zeitpunkt ausführen können. Meistens wird stattdessen cron verwendet, dies ist jedoch atin vielen Distributionen standardmäßig der Fall. Ich ging davon aus, dass das OP nur so etwas macht echo "scriptpath" | at {time}, aber vielleicht auch nicht.
Zoredache
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.