ここに私の削除スクリプトがあります。私のプロジェクトがなぜ応答しないのかわかりません。エラーも発生せず、コマンドラインに「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"
つまり、ファイルを削除するためにファイルに書き込むときは注意してください。間違いをして削除してはいけないことを削除したくないでしょう。私は脚本の残りの部分を注意深く読んでいません。少なくとも最初の数回のテスト実行で実際にファイルを移動する行はコメントアウトします。