Никаких особых приемов не нужно. Этого достаточно:
#!/bin/bash
env PS1='SubShell:' bash --rcfile /home/username/.bashrc
echo Subshell exited. Now doing something...
Подоболочка будет работать в основном терминале. Основной скрипт будет ждать его завершения без каких-либо дополнительных команд.
(Я не знаю, как установить PS1
сверху оболочки. Думаю, он перезаписывается при запуске подоболочки Bash.)
Puede usarcrunch
(que está disponible al menos en las distribuciones de Kali ).
crunch 5 5 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
Bueno... ¿elegante?,sí (solo una muestra rápida):
eval echo $(printf "%s" '{{a..z},{A..Z},{0..9}}'{,,} )
Es muy probable que esta expresión completa bloquee su computadora:
eval echo $(printf "%s" '{{a..z},{A..Z},{0..9}}'{,,,,} )
Una opción de bloqueo no -es usar varios bucles:
nl=$'\n'; tab=$'\t'
n=${1:-3}
eval set -- "$2"
eval "varnames=($(echo {a..z}))"
for i in "${varnames[@]:0:$n}"; do
header+='for '"$i"' do '
middle+='$'"$i"
traile+="done; "
done
loop="${header}${nl} printf %s \"$middle\";${nl}$traile"
#echo "$loop"
eval "$loop"
Llámalo como:
./script 3 '{a..z} {A..Z} {0..9}'
Donde el primer argumento es el número de caracteres y el segundo es la lista (separada por espacios )de los caracteres utilizados.
Eso generará una variable(loop
)con el script a ejecutar y la última evaluación ejecutará ese script. Por ejemplo para:
$./script 5 '{a..z} {A..Z} {0..9}'
El valor de loop
será:
for a do for b do for c do for d do for e do
echo "$a$b$c$d$e";
done; done; done; done; done;
Gnu Parallel может создавать комбинации, см.https://www.gnu.org/software/parallel/Что-то вроде этого:
parallel echo ::: {a..z} {A..Z} {0..9} ::: {a..z} {A..Z} {0..9} ::: {a..z} {A..Z} {0..9} ::: {a..z} {A..Z} {0..9} ::: {a..z} {A..Z} {0..9}
#!/bin/bash
eval `for i in $(seq $1) ; do
echo "for c$i in {a..z} {A..Z} {0..9} ; do"
done
echo -n "echo "
for i in $(seq $1) ; do
echo -n '$c'$i
done
echo ' ;'
for i in $(seq $1) ; do
echo 'done ;'
done`
./npermuter <some number>