UNIX 스크립트가 응답하지 않습니까?

UNIX 스크립트가 응답하지 않습니까?

여기 내 삭제 스크립트가 있습니다. 내 프로젝트가 왜 응답하지 않는지 잘 모르겠습니다. 오류도 발생하지 않고 명령줄에 "sh delete filename"을 입력해도 아무 작업도 수행되지 않습니다. 종료하려면 Ctrl C를 눌러야 합니다. 줄 번호는 무시됩니다. 아래에 코드와 내가 해야 할 일을 게시했습니다.

  • 제거라는 스크립트를 만듭니다.

  • 스크립트에서 $HOME/deleted에 휴지통을 만듭니다.

  • 제거할 파일의 경우 이는 명령줄 매개변수가 되며 스크립트는 다음과 같이 실행되어야 합니다. sh 제거 파일 이름.

  • 스크립트는 rm 명령과 동일한 오류 조건을 테스트하고 rm 명령과 동일한 오류 메시지를 표시해야 합니다.

  • 휴지통에 있는 파일 이름은 다음 형식이어야 합니다.

    #!/bin/bash
    2 sh remove "filename"
    3 function directory(){
    4 #Makes the deleted directory
    5
    6 if [ ! -d ~/deleted ]
    7     then
    8        mkdir ~/deleted
    9 fi
    16}
    17 function movefile(){
    18 #moving files to recycle bin
    19 mv $l ~/deleted/$l
    20 echo "File moved to recycle bin "
    21 }
    22
    23
    24 function error_conditions(){
    25 #prints error messages
    26 if [ ! -f ~/project ]
    27     then
    28         echo "sh: remove: cannot remove '$filename': no such file or directory"
    29 elif [ ! -d ~/project ]
    31     then
    32        echo "sh remove: cannot remove '$filename': is a directory"
    33 else
    34   echo "sh remove: missing operand"
   35  fi
   37 }
   38
   40 function delete_file(){
   41 #gets inode for filename
   42 inode=$(stat -c%i $filename)
   43 filename=$1
   44 pwd=$(readlink -e$filename)
   45 if $interactive
   46     then
            if $verbose = true ]
   47     read -p "Are you sure you want to delete $filename?" i_input
   48         if [ $i_input = "y" ] || [ $i_input = "Y" }
   49             then
   50             mv $filename ~/delete/${filename}_$inode
   51         fi
   52 fi
   53 }
   54 directory 
   55 error_conditions $*
   56 delete_file $*
   57 move_file $*

답변1

질문의 코드가 이라는 파일에 있다고 가정하면 remove2행에서는 스크립트에서 무한 루프가 발생합니다 remove. 기본적으로 BASH 스크립트는 각 줄을 위에서 아래로 명령으로 실행합니다. 스크립트를 실행하려고 하면 remove라인 2( sh remove "filename")에 도달하여 다른 인스턴스를 실행하려고 시도합니다 remove. 이 새 인스턴스는 세 번째 인스턴스를 실행하려고 시도합니다 remove.

간단히 말해서, 2행을 삭제하거나 주석 처리하세요.

# sh remove "filename"

즉, 파일을 삭제하기 위해 파일에 쓸 때는 주의하세요. 실수를 해서 삭제해서는 안 되는 것을 삭제하고 싶지는 않을 것입니다. 나는 대본의 나머지 부분을주의 깊게 읽지 않았습니다. 적어도 처음 몇 번의 테스트 실행에서 실제로 파일을 이동하는 행은 주석 처리하겠습니다.

관련 정보