Ruby e comandi Bash
Non so se vi è mai capitato di richiamare da un modello un comando della bash?! Beh a me è successo e le cose si sono complicate quando, oltre a questo, ho tirato in mezzo i Thread.
Partiamo dall’inizio innanzi tutto se volete usare i comandi della bash dovete lanciare il comado exec
1 exec 'ls'
Il risultato è l’elenco dei file e delle cartelle di root:

Fin qui tutto a posto, non ci sono particolari problemi. Se usate i Thread potrebbero verificarsi degli errori con Mac osX che rispetto a linux (Debian) ha una gestione diversa. Infatti vediamo cosa succede quando lancio un Thread da irb su mac (Tiger 10.0.4) e su debian.
Su Mac si verifica il seguente errore dopo aver istanziato il Thread con Thread.new {}:

Vedete che da l’errore:
1 Errno::EOPNOTSUPP: Operation not supported - ls 2 from :2:in `exec' 3 from (irb):2 4 from :0
Ciò avviene perchè il Ruby crea un posix thread-level thread che non permette semplicemente di capire quale proceso killare quando un altro thread dello stesso process ID lancia un comando exec, per questo motivo mac osX non consente di lanciare exec. Con Mac se volete lanciare un comando bash da un Thread dovete usare:
1 system 'ls'
Vedrete che funzionerà tutto correttamente. Su linux invece la gestione dei pThread consente di lanciare exec


