[PYTHON] Hinweis 2 zum Einbetten der Skriptsprache in ein Bash-Skript

Abgeschnitten

Nach diesem, das ich vor langer Zeit geschrieben habe.

Oh, ich werde das Verhalten unter Windows nicht ansprechen.

Perl und Rubin

A


$ cat hoge.pl
#!/bin/bash
find . -type f | perl -x $0
exit 0

#!/usr/bin/env perl -ln
print ;

$ perl hoge.pl
./bar
./foo
./hoge
.
.
.

1. Perl interpretiert den Interpreter.

Wenn die Zeile #! Nicht die Wörter "perl" oder "indir" enthält, wird das nach #! Angegebene Programm anstelle des Perl-Interpreters ausgeführt. Das ist ein bisschen seltsam, aber es funktioniert für diejenigen, die eine Maschine verwenden, die # nicht kann!; Wenn Sie sagen, dass die SHELL, die Sie für Ihr Programm verwenden, / usr / bin / perl ist, dann ist Perl korrekt. Weil es den Dolmetscher startet. (Zitiert aus perlrun)

Mit anderen Worten

python


$ cat hoge.rb
#!/usr/bin/env ruby
puts("ruby")
$ perl hoge.rb
ruby
$ cat hoge.sh
#!/bin/bash
echo bash
$ perl hoge.sh
bash

2. Ruby springt zu Ruby, wenn mehrere Dolmetscher geschrieben sind.

Wenn das in der Befehlszeile angegebene Skript eine Datei ist, die mit "#!" Beginnt und die Zeile nicht die Zeichenfolge "ruby" enthält, wird die Zeile übersprungen. Wenn Sie in der folgenden Zeichenfolge eine Zeile finden, die die Zeichenfolge "ruby" enthält, führen Sie die Zeile unter dieser Zeile als Ruby-Skript aus. (Zitiert aus rdoc)

B


$ cat hoge2.sh
#!/bin/bash
echo bash
ruby -x $0
exit 0
#!/usr/bin/env ruby
puts("ruby")

Im Falle von,

python


$ ruby hoge2.sh
ruby

3. Perl und Ruby können auch den Beginn der Analyse mit -x verzögern.

Wenn Sie den Schalter> -x angeben, sucht er zuerst nach einer Zeile, die die Zeichenfolgen #! Und "perl" enthält, und beginnt von dort aus mit dem Parsen. Dies ist nützlich, wenn Sie ein Programm in großen Text einbetten und ausführen möchten. (In diesem Fall sollte das Ende des Programms durch das Token END angezeigt werden.)

(Zitiert aus perlrun)

Für Ruby ist dasselbe in rdoc klar angegeben.

Daher gilt der Code von A.

sogar in Rubin B.

Führen Sie B mit Bash aus.


$ bash hoge2.sh
bash
ruby

Das kann man also auch sagen.

python


$ cat hoge3.sh
#!/bin/bash
echo bash
perl -x $0
ruby -x $0

exit 0

#!/usr/bin/env perl
print("perl\n") ;

__END__

#!/usr/bin/env ruby
puts("ruby")

__END__

Laufen Sie mit Bash


$ bash hoge3.sh
bash
perl
ruby

Laufen Sie mit Perl


$ perl hoge3.sh
bash
perl
ruby

Lauf mit Rubin


$ ruby hoge3.sh
ruby

Nachtrag

Das habe ich geschrieben

Wenn Sie es noch einmal lesen, gibt es im Fall von Rubin keine Bedeutung für die Existenz von -x? Wofür ist es ... vielleicht für Windows ...

tsuiki.sh


#!/bin/bash
ruby -x $0
exit 0
#!/usr/bin/env ruby
puts("ruby")

^D            #Steuerung+V, Contorol+Eingebettet in D.(Mac-Terminal)

puts("test")
$ bash tsuiki.sh
ruby
$ ruby tsuiki.sh
ruby

Für Python

Im Fall von Python wird, obwohl es -x gibt, klar angegeben, dass "nur eine Zeile übersprungen wird", mit erheblichen Einschränkungen.

-x (Original) Überspringen Sie die erste Quellzeile, um #! Cmd im Nicht-Unix-Format zu verwenden. Dies gilt nur für DOS-Hacks. (Zitiert aus Dokument)

Wenn Sie es jedoch übertreiben,

$ cat hoge4.sh
find . -type f | python -x  $0 ; exit 0
#!/usr/bin/env python
import sys
for line in sys.stdin:
   print(line.strip())

Gleiches wie A.


$ bash hoge4.sh
./bar
./foo
./hoge
.
.
.

Es ist nicht unmöglich, so etwas zu tun.

Recommended Posts

Hinweise zum Einbetten der Skriptsprache in Bash-Skripte
Hinweis 2 zum Einbetten der Skriptsprache in ein Bash-Skript
Ändern Sie die Liste in der for-Anweisung
Führen Sie den Python-Interpreter im Skript aus
Lassen Sie uns das Bash-Skript in Java ausführen
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben
Erstellen Sie eine Datei, die in der Skriptsprache ausgeführt werden kann
Registrieren Sie zum ersten Mal eine Aufgabe in cron
Überprüfen Sie, ob es sich um Unix in der Skriptsprache handelt
Einbettung der Maschinensprache in die Sprache C.
Hinweis zum Standardverhalten von collate_fn in PyTorch
So implementieren Sie vorläufig einen Fortschrittsbalken in einer Skriptsprache
Erstellen Sie ein Skript für Ihre Pepper-Fertigkeit in einer Tabelle und laden Sie SayText direkt aus dem Skript
Verarbeiten Sie die Dateien im Ordner in der Reihenfolge mit dem Shell-Skript
[Hinweis] Ein Shell-Skript, das die CPU-Auslastung eines bestimmten Prozesses in einer while-Schleife überprüft.
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben - OpenCV-Port Python zu C ++ -
Ich habe ein Skript geschrieben, das das Bild in zwei Teile teilt
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben. 5 - Verwenden Sie die integrierte Spyder-Umgebung, um numerische Daten zu überprüfen.
Made gomi, ein Papierkorb-Tool für rm in Go-Sprache
Speichern Sie die Pydrive-Authentifizierungsdatei in einem anderen Verzeichnis als das Skript
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Ändern Sie die Bash-Eingabeaufforderung zur einfachen Anzeige in eine einfache Farbe
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
Programmiersprache, die junge Menschen in Zukunft brauchen werden
Hinweis zu get_scorer von sklearn
Holen Sie sich den Skriptpfad in Python
Ein kleines Skript zur Selbstverteidigung von Malware
Wechseln Sie die in Django 1.9 angezeigte Sprache
Erste Schritte mit SQLite in einer Programmiersprache
Hinweise zum Schreiben von Python-ähnlichem Code
Eine Geschichte über den Versuch, den Testprozess eines 20 Jahre alten Systems in C zu verbessern
Hinzufügen von Kv-Sprachsyntax-Highlights zu Spyder in Python IDE
Verwenden wir eine Skriptsprache für ein komfortables C ++ - Leben. 2 Generieren Sie automatisch eine C ++ - Quelle
Verwenden wir die Skriptsprache für ein komfortables C ++ - Leben. 4 - Verwenden wir die eigene C ++ - Bibliothek aus der Skriptsprache. -
Richtlinien für die Reinkarnation in der Welt der Linux-Programmierentwicklung (C / C ++ - Sprache)
AtCoder-Autor Ich habe ein Skript geschrieben, das Wettbewerbe für jeden Autor zusammenfasst
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben. 3-Überlassen Sie die grafische Darstellung matplotlib-
Zeigen Sie den vollständigen Pfad (absoluten Pfad) einer Datei in einem Verzeichnis in Linux Bash an
Was Java-Benutzer davon gehalten haben, die Go-Sprache für einen Tag zu verwenden
Mit LSTM + Embedding habe ich die Bedeutung der Vorverarbeitung in NLP erneut bekräftigt und gleichzeitig ein Modell zur Unterscheidung der Emotionen von Tweets erstellt.
Die gefragteste Programmiersprache im Jahr 2020
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Finde die Daten des verrückten Turniers heraus
Material des Ansatzes zur Einbettung in ARM
Rückblick auf 2016 in der Crystal-Sprache
MongoDB mit Python zum ersten Mal
Holen Sie sich ein Zeichen für Conoha mit Python
Zeichnen Sie Grafiken in der Programmiersprache Julia
Verwenden Sie Python 3 Subprocess.run () im CGI-Skript
Ein Memo, dass ich das Pyramid Tutorial ausprobiert habe
Ordnen Sie die Zahlen spiralförmig an
Verwenden Sie für den Diktatschlüssel in Python etwas anderes als eine <br> Zeichenfolge
Ich suchte nach den Fähigkeiten, die erforderlich sind, um Webingenieur bei Python zu werden
Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb
Drehen Sie in Python mehrere Listen mit for-Anweisung gleichzeitig