GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Können Sie mehrere ausführbare Skripte in einem Verzeichnis ablegen und durch die Beschaffung dieses Verzeichnisses alle diese Befehle verfügbar machen?

Ich möchte eine Reihe ausführbarer Skripte in das .command-Verzeichnis (das auch ausführbar ist) einfügen und muss dann nur dieses Verzeichnis in meinem .bash_profile beziehen. Ist das möglich? Ich kann das mit einer Datei zum Laufen bringen. Aber beim Hinzufügen einer zweiten Datei sind die Befehle der zweiten Datei in der Shell nicht verfügbar.

mein .bashprofil

source ~/.commands/*

mein .commands-Ordner

-rwxr-xr-x   1 christopherreece  staff   108 Dec 14 08:55 server_utils.sh
-rwxr-xr-x   1 christopherreece  staff    23 Dec 14 09:04 short

Inhalt von short

echo 'a short program'

Wettbewerbe von server_utils.sh

function upfile {
  scp $1 [email protected]:~/
}

Shell-Eingabe und -Ausgabe.

$ hello
hello

$ short
-bash: short: command not found

Akzeptierte Antwort:

Das geht nicht mit einer source . Das erste Argument wird als Dateiname genommen, die anderen erscheinen als Positionsparameter $1 , $2 … im Quellskript.

$ cat test.src 
echo hello $1
$ source test.src there
hello there

Aber Sie könnten es mit einer Schleife tun:

for f in ~/commands/*.src; do
    source "$f"
done

(Nebenbei bemerkt, solche Sachen nur Dateien mit einer bestimmten Erweiterung einzuschließen ist ziemlich nützlich, wenn Sie einen Editor verwenden, der Backup-Dateien mit einem nachgestellten ~ hinterlässt . Die Sicherungskopien werden dann nicht versehentlich aktiv.)

Beachten Sie jedoch, dass, wenn Sie ein Quellskript haben, das einfache Befehle enthält (wie dieser echo oben oder Ihr short ), werden sie ausgeführt, wenn das Skript source ist d. Sie generieren keine Funktionen in der Sourcing-Shell.

$ cat test2.src 
echo "shows when sourced"
func() {
    echo "shows when function used"
} 
$ source test2.src 
shows when sourced
$ func
shows when function used

Wenn Sie stattdessen ausführbare Skripte haben möchten, die Art, in der das Skript ausgeführt wird, wenn Sie seinen Namen als Befehl angeben, fügen Sie sie irgendwo in PATH ein (Ich würde vorschlagen, ~/bin zu verwenden Geben Sie ihnen dafür die Ausführungsberechtigung und setzen Sie die richtigen Hashbangs an den Anfang der Skripte (#!/bin/sh oder #!/bin/bash oder was auch immer)


Linux
  1. Linux-Befehl, um alle verfügbaren Befehle und Aliase aufzulisten

  2. Wie finden Sie den ursprünglichen Benutzer durch mehrere sudo- und su-Befehle?

  3. Soll ich beim Kopieren von Ordnern einen abschließenden Schrägstrich nach Quelle und Ziel setzen?

  4. Wie kann ich alle PDF-Dateien in einem Verzeichnis (und seinen Unterverzeichnissen) rekursiv in ein einziges Ausgabeverzeichnis kopieren?

  5. Können Sie die Berechtigung für alle Dateien außer einem Verzeichnis in Linux ändern?

12 lustige Linux-Befehle, die Sie zum Lachen bringen können

Beste Linux-Laptops, die Sie für den Heim- und Bürogebrauch kaufen können

Wie verschiebt (und überschreibt) man alle Dateien von einem Verzeichnis in ein anderes?

Wie kann ich Bazel dazu bringen, beim Erstellen externen Speicher zu verwenden?

Wie kann ich Strg-Z und bg in einem Tastendruck ausführen, damit der Prozess im Hintergrund fortgesetzt wird?

Können Sie alle erweiterten Attribute anzeigen/auflisten und wie?