Existe alguma maneira que eu possa encaixar isso em meu ~ / .bashrc como uma função?

3

Acabei de descobrir este pequeno código útil neste site útil .

#!/bin/sh
 exec tclsh "$0" ${1+"$@"}

 proc main {} {
     set lines [lrange [split [read stdin] \n] 0 end-1]
     set count [llength $lines]

     for {set idx_1 0} {$idx_1 < $count} {incr idx_1} {
         set idx_2 [expr {int($count * rand())}]
         set temp [lindex $lines $idx_1]
         lset lines $idx_1 [lindex $lines $idx_2]
         lset lines $idx_2 $temp
     }

     puts [join $lines \n]
 }

 main

Infelizmente, não gosto de scripts. Se eu puder, eu faço bash funções em vez disso. (Eu até fui tão longe a ponto de ofuscar completamente os scripts Python, a fim de encaixá-los no meu ~ / .bashrc de maneira discreta, a saber :)

dna-ify () {
python -c "exec'eJxdkUFrhDAQhe/5FdNsIQpu9rIspSBtLz330N4EiTq6AY0hiaW7v75j1F1aLwlv3vdmMu4eDpN3h0qbA5pvsJdwHg3bQT022nT51+f7/omx1o0DlGU7hclhWYIe7OgCWKdNINXUQRO1qsp1VjmPGfiLz6BSHk/HDNAsmZ6xWHaQ36zyzXXTgCZ8xEqSrhapmqZUay0Rre7RqAFFBoZUn4sXkbL5RlkrEY+Z8ZSi27mFlxv4zIA+H2jujpDRokn+GFLpUDVEYk+sGcP8BukDDS61VyFckvRfyN1wQ/3aaBsprumMvaUqu97JeJFxMZiIa68res61uhmW1cnqdFw9K0spMRMSvvww2NdQcPzBuhA8gy0iA14I2WBkC7HEFSK9S3NPEgoOj68EerQ55yn7BbL1snM='.decode('base64').decode('zlib')" $@
}

Então, existe alguma (e, como a amostra acima deve indicar, eu quero dizer qualquer ) maneira de fazer isso com esse código?

    
por ixtmixilix 08.09.2012 / 14:04

2 respostas

2

Diga a tclsh para ler o script de um diferente <> descritor de arquivo , e use um aqui documento para passar o script.

shuffle () {
  tclsh /dev/fd/3 "$@" 3<<'EOF'
proc main {} {
    …
}
main
EOF
}
    
por 08.09.2012 / 15:31
3

Não é o que você pede, mas a randomização de linha já está implementada em coreutils .

Use shuf ou sort -r .

Tente por exemplo:

echo {1..10} | tr ' ' '\n' | shuf

Exemplo de saída:

8
4
2
7
5
10
6
3
1
9
    
por 08.09.2012 / 14:31