每次运行此代码时,都会收到错误文件或目录不存在。为什么呢?
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部分仍可正常工作。
答案 0 :(得分:2)
释义/总结/扩展my answer for a similar question:
我怀疑你真的打算在你的剧本中使用&
而不是&&
。
"File Not deleted"
not 是我使用的任何Linux系统上的有效命令。也许你错过了echo
那里?
您必须修复变量报价。如果filename
变量包含空格,则shell将$filename
扩展为多个参数。您需要将其括在双引号中:
mv "$filename" ~/TAM/dustbin
我没有看到您的脚本在任何地方创建~/TAM/
目录...
答案 1 :(得分:1)
您错过了echo
和一个&&
。
echo "`command`"
来管道命令的结果字符串。或者,您可以直接使用command
而不使用反引号和引号(不将结果存储在字符串中),在这种情况下,您不需要echo
,因为该命令会将其结果传递给下一个命令。&
将在后台运行上述命令(async。)。要检查返回值并有条件执行,您需要&&
和||
。这是一个完整的解决方案/示例(包括更多日志记录):
# 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