Acabo de compilar el código fuente de un programa llamadojuaneldestripador. Actualmente, si quiero ejecutarlo, john
tengo que cd
ingresar al run/
directorio y ejecutarlo con ./john
. Sin embargo, preferiría poder ejecutar el john
comando desde cualquier directorio, como si estuviera instalado en todo el sistema. No puedo crear un alias para esto porque necesito poder pasar parámetros al binario. Entonces intenté hacer un pequeño script de shell.
#!/bin/bash
/home/username/tools/JohnTheRipper/run/john $@
Coloqué este script /usr/local/bin
para que esté en mi camino. Este script funciona, peroSOLOsi lo ejecuto especificando la ruta.
$ 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)
...
No funcionará si intento ejecutarlo usando la $PATH
variable de entorno
$ which john
/usr/local/bin/john
$ john --test
bash: syntax error near unexpected token `--test'
¿Por qué es este el caso? ¿Por qué no se pasan los argumentos de la línea de comando a mi script de shell? ¿Y cómo puedo configurarlo para poder ejecutar el john
comando desde cualquier directorio, permitiéndome pasarle argumentos?
NotaLa solución debe poder aceptar rutas relativas al pasar parámetros a John. Por ejemplo, si estoy en el directorio d/
con un archivo, wordlist.txt
quiero poder ejecutar John como tal:
john --wordlist=./wordlist.txt
Respuesta1
Elcomentario de Kamil Maciorowskime ayudó a resolver este problema. Fue un error del usuario.
$ type -a john
john is aliased to `(cd ~/tools/JohnTheRipper/run/ && ./john )'
john is /usr/local/bin/john
En lo anterior puede ver el resultado de type -a
. Originalmente creé un alias que usaba un subíndice, y cuando eso no funcionó, intenté vincular simbólicamente el ejecutable, probé diferentes alias e intenté crear el script mencionado anteriormente. Sin embargo, ninguno de estos funcionó porque cada vez que hacía un cambio .bashrc
ejecutaba
$ source .bashrc
No sabía que eso source
no sobrescribiría mi john
alias original... Dado que los alias tienen prioridad sobre la $PATH
variable, todo este tiempo john
estuve ejecutando el mismo subshell original que no aceptaba argumentos. Al ejecutar unalias john
, ahora todo funciona.
NOTACuando se trata de crear un enlace simbólico en /usr/local/bin
, estoy de acuerdo en que esta sería una mejor alternativa, pero desafortunadamente no funciona en esta situación, como se puede ver en el siguiente resultado:
$ 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