Ich habe gerade den Quellcode für ein Programm namensJohnTheRipper. Wenn ich es derzeit ausführen möchte, john
muss ich cd
in das run/
Verzeichnis gehen und es mit ausführen ./john
. Mir wäre es jedoch viel lieber, wenn ich den john
Befehl von jedem beliebigen Verzeichnis aus ausführen könnte, als wäre er systemweit installiert. Ich kann dafür keinen Alias erstellen, da ich Parameter an die Binärdatei übergeben können muss. Also habe ich versucht, ein kleines Shell-Skript zu erstellen.
#!/bin/bash
/home/username/tools/JohnTheRipper/run/john $@
Ich habe dieses Skript so platziert, /usr/local/bin
dass es in meinem Pfad liegt. Dieses Skript funktioniert, aberNURwenn ich es durch Angabe des Pfades ausführe.
$ ls john -la
-rwxr-xr-x 1 root root 56 Mar 20 03:54 john
$ ./john --test
Will run 4 OpenMP threads
Benchmarking: descrypt, traditional crypt(3) [DES 256/256 AVX2-16]... (4xOMP)
...
Es funktioniert nicht, wenn ich versuche, es mithilfe der $PATH
Umgebungsvariable auszuführen
$ which john
/usr/local/bin/john
$ john --test
bash: syntax error near unexpected token `--test'
Warum ist das so? Warum werden die Befehlszeilenargumente nicht an mein Shell-Skript übergeben? Und wie kann ich es so einrichten, dass ich den john
Befehl aus jedem beliebigen Verzeichnis ausführen und ihm Argumente übergeben kann?
NotizDie Lösung muss in der Lage sein, relative Pfade zu akzeptieren, wenn Parameter an John übergeben werden. Wenn ich mich beispielsweise im Verzeichnis d/
mit einer Datei befinde, wordlist.txt
möchte ich John folgendermaßen ausführen können:
john --wordlist=./wordlist.txt
Antwort1
DerKommentar von Kamil Maciorowskihat mir geholfen, dieses Problem zu lösen. Es war ein Benutzerfehler.
$ type -a john
john is aliased to `(cd ~/tools/JohnTheRipper/run/ && ./john )'
john is /usr/local/bin/john
Oben sehen Sie die Ausgabe von type -a
. Ich habe ursprünglich einen Alias erstellt, der ein Subskript verwendet, und als das nicht funktionierte, habe ich versucht, die ausführbare Datei zu verknüpfen, ich habe verschiedene Aliase ausprobiert und ich habe versucht, das oben genannte Skript zu erstellen. Nichts davon hat jedoch funktioniert, da ich jedes Mal, wenn ich eine Änderung an vornahm, Folgendes ausführte .bashrc
:
$ source .bashrc
Mir war nicht bewusst, dass source
mein ursprünglicher john
Alias dadurch nicht überschrieben wird. Da Aliase Vorrang vor der $PATH
Variable haben, john
wurde die ganze Zeit dieselbe ursprüngliche Subshell ausgeführt, die keine Argumente akzeptierte. Durch Ausführen von unalias john
funktioniert jetzt alles.
NOTIZIch stimme zu, dass dies zum Erstellen eines symbolischen Links in /usr/local/bin
die bessere Alternative wäre. In dieser Situation funktioniert es jedoch leider nicht, wie Sie der folgenden Ausgabe entnehmen können:
$ ls -la john
lrwxrwxrwx 1 root root 39 Mar 20 12:31 john -> /home/username/tools/JohnTheRipper/run/john
$ john --test
fopen: $JOHN/john.conf: No such file or directory