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

質問のコードがというファイルにあると仮定すると、remove行2ではスクリプトで無限ループが発生しますremove。デフォルトでは、BASHスクリプトは各行を上から下にコマンドとして実行します。スクリプトを実行しようとすると、remove行2(sh remove "filename")に達して別のインスタンスを実行しようとしますremove。この新しいインスタンスは3番目のインスタンスを実行しようとしますremove

簡単に言えば、2行を削除するかコメントアウトしてください。

# sh remove "filename"

つまり、ファイルを削除するためにファイルに書き込むときは注意してください。間違いをして削除してはいけないことを削除したくないでしょう。私は脚本の残りの部分を注意深く読んでいません。少なくとも最初の数回のテスト実行で実際にファイルを移動する行はコメントアウトします。

関連情報