会話分割エラー[閉じる]

会話分割エラー[閉じる]

pwdに加えて複数のサブディレクトリがある場合は、次のスクリプトで分割エラーが発生します。プログラムはエラーメッセージで終了し、シェルをリセットする必要があります。

例:/スクリプトを起動して実行します。私はからまでよくナビゲート/します/etc。そこに行こうとすると/etc/httpd/セグフォルトが発生します。

別の例:スクリプトを起動するlsgui /etcとディレクトリが表示されますが、別のディレクトリに移動しようとすると再びエラーが発生します。

#!/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

修正する

問題はですif [ -d ${lss[$result]} ];then。ディレクトリ内の開くファイルを探しています。前の文をに変更してこの問題を解決してくださいif [ -d $output/${lss[$result]} ];then。ダイアログボックステキストボックスがファイルであることを確認すると、まずセグフォルトを防ぐことができます。

ベストアンサー1

おすすめ記事