2016-12-26 10 views
1

ユーザのシステムのDocumentsフォルダに関連するディレクトリを削除できる必要があります。rmdirでチルダ付きのフォルダパスを使用できません

rmdir: ~/Documents/Folder: No such file or directory 

手動で拡張パス(/ Users/ricky/Documents/Folder)を入力すると正常に動作します。

私はbashが自動的にチルダをパスの先頭に展開したと思っていましたか?

更新:

推奨など、さまざまなアプローチの束を試した後、私は問題は、私はパスを格納していますどのようにしてあることを、今はかなり確信しています。私は私の違いは、手動で入力して何かを動作することはできません

$HOME/Documents/Folder\ 1 
rmdir: $HOME/Documents/Folder\ 1: No such file or directory 
rmdir: /Users/ricky/Documents/Folder\ 1: Directory not empty (This is actually what I want) 

:これは以下を出力

... 
export_folder_path="$(echo $line | cut -f2 -d=)" 
... 

echo $export_folder_path 
rmdir $export_folder_path 
rmdir "$HOME/Documents/Folder\ 1" 

:私は、私は行ずつ読み込むテキストファイルからのパスを取得していますエクスポートパスと変数の使用。変数が拡張を拒否する理由は何ですか$HOME?私は幸運のない引用を加える多くのバリエーションを試しました。

+0

「realpath -m〜/ Documents/Folder」の出力は何ですか? – sschuberth

+0

@sschuberth私はrealpathと呼ばれるプログラムを持っていないようですか? – Ricky

+0

あなたは何をしていますか?あなたがWindows上でBashを実行しているように見えるパスから。もしそうなら、Bashは何ですか? Cygwin? MSYS(2)? Windows用のGit? Windows 10の下のLinuxサブシステム? – sschuberth

答えて

1

すべての場合にチルド展開が機能しません。 bash manualから

rmdir $HOME/Documents/Folder 

:あなたは代わりにHOME変数を使用することができます

チルダ展開単語がクォートされていないチルダ文字 (「〜」)で始まる場合、最初の引用符で囲まれていないが、前のすべての文字をスラッシュ(またはスラッシュが含まれていない場合は すべての文字)は、 チルドプレフィックスと見なされます。チルダプレフィックス内の文字のうち、引用符付きの がない場合、チルダに続くチルダプレフィックス内の文字は、可能なログイン名として扱われる です。このログイン名がNULL 文字列の場合、チルダはシェルパラメータ HOMEの値に置き換えられます。 HOMEが設定されていない場合は、 シェルを実行しているユーザーのホームディレクトリが代わりに使用されます。それ以外の場合、ティルドプレフィックスは で、指定されたログイン名 に関連付けられたホームディレクトリに置き換えられます。

ティルドプレフィックスが '〜+'の場合、シェル変数PWD の値がティルダプレフィックスに置き換わります。 tilde-prefixが '〜 - 'の場合、シェル変数OLDPWDの値 が設定されていれば、その値に置き換えられます。チルダプレフィックス内のチルダに続く 文字が 番のN(オプションで接頭辞 '+'または ' - ')で構成される場合、チルダプレフィックスは であり、ディレクトリstの対応する要素に置き換えられます は、tilde-prefix を引数として呼び出された組み込みのdirによって表示されます。 チルダプレフィックス内のチルダに続く文字が先頭に「+」または「 - 」のない数字で構成されている場合、「+」は とみなされます。

ログイン名が無効であるか、ティルダ拡張に失敗した場合、単語 は変更されません。

+0

ありがとうございました。なぜそれがまだ機能していないのかについてさらに詳しく説明します。 – Ricky

関連する問題