[PYTHON] Sprachen, die auf Shell-Skripte zurückgreifen, wenn ein externes Programm direkt ausgeführt wird

Laut https://linuxjm.osdn.jp/html/LDP_man-pages/man3/exec.3.html usw. hat nur execvp die Funktion, ENOEXEC als Shell-Skript zu interpretieren, wenn es auftritt. Funktioniert diese Funktion, wenn ich ein externes Programm in einer Skriptsprache ohne Shell ausführe?

Vorbereitung

$ cat lsscript
ls

Lauf

Ruby

process.c proc_exec_cmd Versuchen Sie es mit execve, add / bin / sh für ENOEXEC und versuchen Sie es erneut

Python

--Direkte Ausführung (Beispiel): Das Argument von check_call (usw.) ist ein Array

Modules/_posixsubprocess.c child_exec Versuchen Sie es mit execve. ** Fehler bei ENOEXEC **

Gleiches gilt für Python 3. Wenn shell = True ist, schlägt dies nicht fehl, aber pipes.quote und shlex.quote sind erforderlich. (Wenn Sie diesen Artikel lesen, wissen Sie, dass dies erforderlich ist.)

Perl

doio.c Perl_do_aexec5 Versuchen Sie es mit execvp.

PHP

ext/pcntl/pcntl.c pcntl_exec Versuchen Sie es mit execve. ** Fehler bei ENOEXEC **

(Da es sich bei dem oben genannten um exec handelt, müssen Sie fork usw. aufrufen, um es zu einem Unterprozess zu machen. Es gibt ein Standard-Ausführungssystem, das diese Seite in ext / standard / exec.c nicht benötigt, aber es scheint auf popen fixiert zu sein (dh eine Shell ist immer enthalten).)

Fazit

Wenn ich versuche, es in Python / PHP auszuführen, ohne die Shell zu durchlaufen, wird sh nicht automatisch hinzugefügt. Bitte seien Sie vorsichtig, wenn Sie [C-Sprache shebang-like] werfen (https://qiita.com/cielavenir/items/6063c117f25f9188b84c).

Recommended Posts

Sprachen, die auf Shell-Skripte zurückgreifen, wenn ein externes Programm direkt ausgeführt wird
Lassen Sie uns eine externe Spezifikation erstellen, die einfach zu handhaben ist