0

每次运行此代码时,我都会收到错误文件或目录不存在。为什么?

read -p "Enter the filename/path of the file you wish to delete : " filename
echo "Do you want to delete this file"
echo "Y/N"
read ans
case "$ans" in 
   Y) "`readlink -f $filename`" >>~/TAM/store & mv $filename ~/TAM/dustbin
        echo "File moved" ;;
   N) "File Not deleted" ;;
esac

当我准确输入文件名/目录并三次检查其正确性时,我仍然收到此错误,但 readlink 部分有效。

4

2 回答 2

2

解释/总结/扩展我对类似问题的回答

  • 我怀疑你真的打算在你的脚本中使用&而不是。&&

  • "File Not deleted"不是使用过的任何 Linux 系统上的有效命令。也许你错过了echo那里?

  • 你必须修正你的可变报价。如果filename变量包含空格,则$filenameshell 将其扩展为多个参数。您需要将其括在双引号中:

    mv "$filename" ~/TAM/dustbin
    
  • 我没有看到您的脚本在~/TAM/任何地方创建目录...

于 2012-11-21T22:16:22.287 回答
1

你缺少一个echo和一个&&

  1. 用于echo "`command`"通过管道传输命令的结果字符串。或者,您可以直接使用command不带反引号和引号的 (不将结果存储在字符串中),在这种情况下,您不需要 an,echo因为该命令会将其结果通过管道传递给下一个命令。
  2. 单曲&将在后台(异步)运行前面的命令。要检查返回值并有条件地执行,您需要&&||.

这是一个完整的解决方案/示例(包括更多日志记录):

# modified example not messing the $HOME dir.
# should be save to run in a separate dir
touch testfile                 #create file for testing
read -p "Enter the filename/path of the file you wish to delete : " filename
echo "Do you want to delete this file: $filename"
echo "Y/N"
read ans
touch movedfiles               #create a file to store the moved files
[ -d _trash ] || mkdir _trash  #create a dustbin if not already there
case "$ans" in
    Y)  readlink -f "$filename" >> movedfiles && echo "File name stored" &&
        mv "$filename" _trash && echo "File moved" ;;
    N)  echo "File Not deleted" ;;
esac
cat movedfiles                 #display all moved files
于 2012-11-21T22:52:18.367 回答