这是我的删除脚本。不知道为什么我的项目没有响应,它没有给出错误,只是当我在命令行中输入“sh删除文件名”时它没有执行任何操作。我必须按 CTRL C 才能退出。忽略行号。我在下面发布了我的代码以及我必须做的事情:
创建名为remove的脚本
在脚本中的 $HOME/deleted 中创建回收站
对于要删除的任何文件,它将是一个命令行参数,并且脚本应按如下方式执行:sh remove fileName。
该脚本必须测试与 rm 命令相同的错误条件,并显示与 rm 命令相同的错误消息
回收站中的文件名应采用以下格式:filename_inode
#!/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"
也就是说,在写入文件来删除文件时要小心。您不想犯错误并删除不应该删除的内容。我没有仔细阅读剧本的其余部分。我至少会注释掉在前几次测试运行中实际移动文件的行。