Warum warnt mich "at", dass Befehle mit / bin / sh ausgeführt werden? Was ist, wenn ich eine andere Shell möchte?

12

Ich habe versucht, ataus einem Skript heraus zu verwenden, und es wird gedruckt:

Warnung: Befehle werden mit / bin / sh ausgeführt

Wie würde ich eine andere Shell verwenden, wenn ich wollte?

Cratylus
quelle

Antworten:

14

atWarnt Sie unter Linux immer davor, dass die angegebenen Befehle mit /bin/shund nicht mit Ihrer bevorzugten Shell ausgeführt werden. Sie können diese Nachricht nicht unterdrücken, sie ist im Quellcode fest codiert.

Der Befehl, den Sie übergeben, wird von interpretiert /bin/sh. Dieser Befehl kann der Pfad zu einem Skript sein, wenn Sie möchten. Anschließend /bin/shwird das Skriptprogramm ausgeführt, wodurch der Interpreter des Skripts gestartet und das Skript interpretiert wird. Die Sprache des Skripts ist völlig unabhängig von dem Programm, mit dem es gestartet wird. Wenn Sie beispielsweise ein Bash-Skript ausführen möchten (dh ein Skript, das mit beginnt #!/bin/bash), übergeben Sie einfach den Pfad zum Skript an atund ignorieren Sie die irrelevante Nachricht.

Gilles 'SO - hör auf böse zu sein'
quelle
4

Sie können es von einer anderen Shell aus ausführen, indem Sie das Skript shebang ändern . Einige typische Shebang-Linien:

#!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell
#!/bin/csh -f — Execute the file using csh, the C shell,
#!/usr/bin/perl -T — Execute using Perl with the option for taint checks
#!/usr/bin/php — Execute the file using the PHP command line interpreter
#!/usr/bin/python -O — Execute using Python with optimizations to code
#!/usr/bin/ruby — Execute using Ruby

Um ein Skript zu bestimmten Zeiten auszuführen, empfehle ich Ihnen, einen Cronjob hinzuzufügen

Beispiel:

In der folgenden Zeile wird das Benutzerprogramm test.pl - angeblich ein Perl-Skript - alle zwei Stunden um Mitternacht, 2 Uhr morgens, 4 Uhr morgens, 6 Uhr morgens, 8 Uhr morgens usw. ausgeführt:

0 * / 2 * * * /home/username/test.pl

vfbsilva
quelle
#!/usr/bin/perlist schon der Schebang in meinem Drehbuch, aber ich bekomme die Warnung
Cratylus
@Cratylus werfen Sie einen Blick hier für die Erklärung.
vfbsilva
+1 shbang und Erwähnung von Rubin und Perl. Erwägen Sie auch die Verwendung von "#! / Bin / env ruby".
ChuckCottrill
meins beschwert sich noch nach #!/bin/sh....?
gloomy.penguin