Я только что скомпилировал исходный код программы под названиемJohnTheRipper. В настоящее время, если я хочу запустить, john
мне нужно cd
войти в run/
каталог и выполнить его с помощью ./john
. Однако я бы предпочел иметь возможность запускать john
команду из любого каталога, как если бы она была установлена в системе. Я не могу создать псевдоним для этого, потому что мне нужно иметь возможность передавать параметры в двоичный файл. Поэтому я попытался создать небольшой скрипт оболочки.
#!/bin/bash
/home/username/tools/JohnTheRipper/run/john $@
Я поместил этот скрипт в /usr/local/bin
так, чтобы он был в моем пути. Этот скрипт работает, ноТОЛЬКОесли я запущу его, указав путь.
$ 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)
...
Это не сработает, если я попытаюсь запустить его с использованием $PATH
переменной среды
$ which john
/usr/local/bin/john
$ john --test
bash: syntax error near unexpected token `--test'
Почему так? Почему аргументы командной строки не передаются в мой скрипт оболочки? И как мне настроить его так, чтобы я мог запустить команду john
из любого каталога, что позволит мне передавать ей аргументы?
ПримечаниеРешение должно иметь возможность принимать относительные пути при передаче параметров john. Например, если я нахожусь в каталоге d/
с файлом, wordlist.txt
я хочу иметь возможность запустить john следующим образом:
john --wordlist=./wordlist.txt
решение1
Theкомментарий Камиля Мациоровскипомог мне решить эту проблему. Это была ошибка пользователя.
$ type -a john
john is aliased to `(cd ~/tools/JohnTheRipper/run/ && ./john )'
john is /usr/local/bin/john
Выше вы можете видеть вывод type -a
. Изначально я создал псевдоним, который использовал индекс, и когда это не сработало, я попытался создать символическую ссылку на исполняемый файл, я пробовал разные псевдонимы и пытался создать вышеупомянутый скрипт. Однако ни один из них не сработал, потому что каждый раз, когда я вносил изменения, .bashrc
я запускал
$ source .bashrc
Я не знал, что source
это не перезапишет мой оригинальный john
псевдоним... Поскольку псевдонимы имеют приоритет над $PATH
переменной, все это время john
выполнялась та же исходная подоболочка, которая не принимала аргументов. Запустив unalias john
, теперь все работает.
ПРИМЕЧАНИЕЧто касается создания символической ссылки в /usr/local/bin
, я согласен, что это было бы лучшей альтернативой, но, к сожалению, в данной ситуации это не работает, как вы можете видеть из следующего вывода:
$ 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