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)