여기 내 삭제 스크립트가 있습니다. 내 프로젝트가 왜 응답하지 않는지 잘 모르겠습니다. 오류도 발생하지 않고 명령줄에 "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
질문의 코드가 이라는 파일에 있다고 가정하면 remove
2행에서는 스크립트에서 무한 루프가 발생합니다 remove
. 기본적으로 BASH 스크립트는 각 줄을 위에서 아래로 명령으로 실행합니다. 스크립트를 실행하려고 하면 remove
라인 2( sh remove "filename"
)에 도달하여 다른 인스턴스를 실행하려고 시도합니다 remove
. 이 새 인스턴스는 세 번째 인스턴스를 실행하려고 시도합니다 remove
.
간단히 말해서, 2행을 삭제하거나 주석 처리하세요.
# sh remove "filename"
즉, 파일을 삭제하기 위해 파일에 쓸 때는 주의하세요. 실수를 해서 삭제해서는 안 되는 것을 삭제하고 싶지는 않을 것입니다. 나는 대본의 나머지 부분을주의 깊게 읽지 않았습니다. 적어도 처음 몇 번의 테스트 실행에서 실제로 파일을 이동하는 행은 주석 처리하겠습니다.