この~
文字は、ファイルシステムのコンテキストでは意味がありません。シェルのコンテキストでは意味があり、 Tilde Expansion$HOME
の一部として置き換えられます。バッシュマン より:
チルダ展開
単語が引用符で囲まれていないチルダ文字 (`~') で始まる場合、最初の引用符で囲まれていないスラッシュの前にあるすべての文字 (または、引用符で囲まれていないスラッシュがない場合はすべての文字) がチルダ接頭辞と見なされます。チルダ接頭辞の文字が引用符で囲まれていない場合、チルダに続くチルド接頭辞の文字は、可能なログイン名として扱われます。このログイン名がヌル文字列の場合、チルダはシェル パラメータ HOME の値に置き換えられます。HOME が設定されていない場合、シェルを実行しているユーザーのホームディレクトリが代わりに使用されます。それ以外の場合、チルダ接頭辞は、指定されたログイン名に関連付けられたホームディレクトリに置き換えられます。
そのため、Dolda2000 が提案したように、$HOME
代わりに を使用するという 1 つの解決策がありますが、ユーザーが root でない場合 (この場合の例として root) は機能~
しません。~root
より一般的な解決策は、呼び出しでシェルをsystem
呼び出すことです。Objective-C はわかりませんが、bash を使用すると、次のようになります。
int status=system([[NSString stringWithFormat:@"bash -c 'touch %@/%@'", filePath, filename]UTF8String])