编辑:DIR_trash="trash"
我写了一个函数将文件移动到当前目录。
if [ "$1" == "-u" ]
then
if [ $# == 1 ]
then
echo "Something went wrong. Please make sure you're passing the name of the file/directory after '-u'."
else
if [ -f $DIR_trash/$2.zip ]
then
echo "$2.zip has been found in the trash."
cd
cd $DIR_trash
sed -i "/$2/d" $file7
mv -i /$DIR_trash/$2.zip .
unzip $2.zip
\rm $2.zip
cd
else
echo "$2.zip has not been found in the trash."
fi
fi
fi
如您所见,有一行代码表示:
mv -i /DIR_trash/$2.zip .
所以基本上我试图将我在参数 2 中传递的文件从垃圾箱移动到当前目录。我总是从主目录运行这个脚本,它有垃圾目录。这是我运行时得到的:
每当我在 Konsole(从家庭目录中)手动编写它时,它确实有效:
rm -u trash/d1 .
我没有想法了。有人可以帮忙吗?
答案 0 :(得分:1)
假设您运行脚本,当前目录为 /some/where
,参数为 -u
和 d1
。我还将假设您的主目录是 /home/ninini
。让我们看看您的脚本在哪里查找文件。
DIR_trash="trash"
if [ -f $DIR_trash/$2.zip ]
您检查 /some/where/trash/d1.zip
是否存在。
cd
cd $DIR_trash
假设两个 cd
命令都成功,当前目录现在是 /home/ninini/trash
。
mv -i /$DIR_trash/$2.zip .
您是说将 /trash/d1.zip
移动到当前目录,即 /home/ninini/trash
。
来源和目的地都没有意义。源 /$DIR_trash
没有意义:为什么要在根目录下寻找名为 trash
的目录?目标没有意义,因为您只是尝试更改到垃圾目录,而现在您正在尝试将文件从垃圾目录中移出......进入垃圾目录。
我不知道正确的代码是什么,因为您没有说明脚本的用途。您确实说要“将文件移动到当前目录”;那么你不能在脚本中途更改当前目录!假设 test 命令中的路径 $DIR_trash/$2.zip
是正确的,删除 cd
命令并写入
mv -i -- "$DIR_trash/$2.zip" .
请注意,这会将文件从当前目录下名为 trash
的目录中移动。如果这不是您想要的,您需要更改 DIR_trash
的定义。它应该是一个绝对路径,也许
DIR_trash=~/trash
另请注意,您的脚本会在包含空格和其他特殊字符的文件上中断。始终在变量替换周围加上双引号:"$VAR"
,而不是 $VAR
。 (例外:当你知道你需要一些双引号阻止的效果,并且你明白为什么将它们排除在外是安全的。)