UNIX 脚本无响应?

UNIX 脚本无响应?

这是我的删除脚本。不知道为什么我的项目没有响应,它没有给出错误,只是当我在命令行中输入“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"

也就是说,在写入文件来删除文件时要小心。您不想犯错误并删除不应该删除的内容。我没有仔细阅读剧本的其余部分。我至少会注释掉在前几次测试运行中实际移动文件的行。

相关内容