Estou recebendo uma falha de segmentação com o script a seguir quando é mais que um filho dir além do pwd. O programa mata com a mensagem de erro e eu tenho que redefinir o shell.
Por exemplo: eu começo em /
e executo o script. Eu naveguei de /
para /etc
bem. Quando tento ir para /etc/httpd/
, é quando recebo a falha do segmento.
Outro exemplo: eu inicio o script com lsgui /etc
e nesse ponto ele mostrará esse diretório, mas quando eu tento navegar para outro diretório ele falha novamente.
#!/bin/bash
output=${1-$PWD}
IFS=$'\r\n' lss=($(ls -1 $output))
for ((i=0;i<${#lss[@]};i++));do
x+=($i \"${lss[$i]}\")
done
justdir=($(basename $output))
desc=($(grep $justdir /root/lsgui.conf))
if [ -z $desc ]
then
desc=$output
fi
dialog --keep-tite --title 'lsgui' --menu $desc 40 70 ${#lss[@]} ${x[@]} 2>/tmp/lsgui.$$
if [ $? -gt 0 ]; then
rm -f /tmp/lsgui.$$
clear
exit 0
fi
result='cat /tmp/lsgui.$$'
case $? in
0)
if [ -d ${lss[$result]} ];then
/root/lsgui $output/${lss[$result]}
else
dialog --keep-tite --title "${lss[$result]}" --textbox $output/${lss[$result]} 40 70
fi
esac
UPDATE
O problema foi if [ -d ${lss[$result]} ];then
. Ele estava olhando para abrir um arquivo em um dir. Isso foi corrigido alterando a instrução anterior para if [ -d $output/${lss[$result]} ];then
. Eu provavelmente poderia ter evitado o segfault, verificando se a caixa de diálogo era um arquivo ou não.