Unterschied zwischen "./" und "sh" in UNIX
Manchmal sehe ich, dass einige Skripte ausgeführt, die durch die "sh" - Befehl, und manchmal durch "./" Befehl.Ich bin nicht in der Lage zu verstehen, den genauen Unterschied zwischen Ihnen.Bitte helfen Sie mir .
- vielleicht auch interessant: askubuntu.com/q/22910/354350
Du musst angemeldet sein, um einen Kommentar abzugeben.
sh file
führt ein shell-Skript-Datei in einem neuen shell-Prozess.. file
führt ein shell-Skript-Datei in der aktuellen shell-Prozess../file
ausführen wird die Datei im aktuellen Verzeichnis. Die Datei kann eine ausführbare Binärdatei, oder es kann beginnen mit einer hashbang-Zeile (die erste Zeile der Datei in form von#!....
zum Beispiel#!/usr/bin/ruby
in einer Datei bedeuten würde das Skript ausgeführt werden muss als eine Ruby-Datei). Die Datei muss das executable-flag gesetzt.Zum Beispiel, wenn Sie das Skript
test.sh
:und Sie führen es mit
sh test.sh
würden Sie die Einführung eines neuensh
(oder eherbash
wahrscheinlich, wie man softlinked zu den anderen in den modernen Systemen), dann definieren Sie eine neue variable drin, dann exit. Eine nachträglicheecho $TEST
druckt eine leere Zeile, die variable ist nicht gesetzt in der äußeren Schale.Wenn Sie starten Sie es mit
. test.sh
würden Sie das Skript ausführen, das mit der aktuellen shell. Das Ergebnisecho $TEST
drucken würdepresent
.Wenn Sie starten Sie es mit
./test.sh
die erste Zeile#!/bin/sh
erkannt werden würden, dann wäre es genau so, wie wenn du geschrieben/bin/sh ./test.sh
, der in diesem Fall läuft alles auf das erste Szenario. Aber wenn die hashbang-Zeile war, zum Beispiel#!/usr/bin/perl -w
würde die Datei ausgeführt wurde, mit/usr/bin/perl -w ./test.sh
.bash
wird davon ausgehen, es ist ein shell-Skript-Datei. Sie brauchen einen hashbang wenn Sie möchten, verwenden Sie andere Dolmetscher.In einfachen Worten, die
sh file1
Ausführung sh Befehl/executable mit Datei1 als parameter. In diesem Fall Datei1 erfordert nicht ausführbar sh ausführbare Datei Lesen und fangen Sie die Befehle in der Datei../file1
seine nichts aber ausgeführt/ausführen eine ausführbare Datei Datei1, daher es erfordert ausführbare Rechte. In diesem Fall führt er auf der Schale erwähnt in der shebang#!/bin/sh
wenn Ihr nicht erwähnt, dann seine auf die aktuelle shell.Hoffe, die obigen Aussagen sind nicht das chaos 🙂
wenn Ihre Datei ist keine ausführbare Datei, die Sie nicht ausführen können, verwenden
./file_name.sh
normal ausgeführt werden kannsh file_name.sh
wenn Sie eine änderung an Ihrer Datei zu ausführbarenchmod a+x file_name.sh
Sie können Ihre Datei die von./file_name.sh