대화 분할 오류 [닫기]

대화 분할 오류 [닫기]

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. 대화 상자 텍스트 상자가 파일인지 확인하면 우선 세그폴트를 방지할 수 있을 것입니다.

관련 정보