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変数に空白が含まれている場合$filename、シェルによって複数の引数に展開されます。二重引用符で囲む必要があります。

    mv "$filename" ~/TAM/dustbin
    
  • あなたのスクリプトが~/TAM/どこにもディレクトリを作成しているのを見ません...

于 2012-11-21T22:16:22.287 に答える
1

echoあなたはと1つが欠けてい&&ます。

  1. echo "`command`"コマンドの結果文字列をパイプするために使用します。または、バッククォートと引用符を使用せずに(結果を文字列に格納せずに)直接使用することもできます。この場合、コマンドは結果を次のコマンドにパイプcommand処理するため、は必要ありません。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 に答える