Все возможные комбинации символов и чисел

Никаких особых приемов не нужно. Этого достаточно:

#!/bin/bash 

env PS1='SubShell:' bash --rcfile /home/username/.bashrc

echo Subshell exited. Now doing something...

Подоболочка будет работать в основном терминале. Основной скрипт будет ждать его завершения без каких-либо дополнительных команд.

(Я не знаю, как установить PS1 сверху оболочки. Думаю, он перезаписывается при запуске подоболочки Bash.)

13
18.05.2015, 15:26
4 ответа

Puede usarcrunch(que está disponible al menos en las distribuciones de Kali ).

crunch 5 5 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
5
27.01.2020, 19:52

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 loopserá:

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;
1
27.01.2020, 19:52

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}
2
27.01.2020, 19:52
 #!/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>
-2
12.04.2020, 01:47

Теги

Похожие вопросы