[ トップページ ]
Web とインターネット:クラウドコンピューティング

iCloud のディレクトリ名に空白があるので余計な苦労をさせられる

iCloud のストレージは Mac では /Users/…/Library/Mobile\ Documents/com\~apple\~CloudDocs というディレクトリにマウントされる. このディレクトリ名のなかに空白があるために shell (bash) でそれが 2 個の文字列に分割されてしまってエラーになる. なぜこんなおかしな名前をつけたのか…

このディレクトリ名は空白が "\" で escape されていればその場ではひとつの文字列とみなされて,cd などのコマンドでうまくあつかえる. 上記のディレクトリ名はそうなっている. ところが,それが shell script にわたされると,escape (\) がきえてしまう. そのため,そのディレクトリ名を shell script 内でべつのコマンドにわたそうとしても,うまくいかない. べつのコマンドになんとか escape された空白をわたそうとしたが,うまくいかない. 空白に "\" をつけても 2 つの文字列に分割されてしまう.

しかたがないのでコマンドを実行するディレクトリ内に Documents という symbolic link をつくった. そのリンク先が /Users/yk/Library/Mobile\ Documents だ. こうしておいて /Users/yk/Library/Mobile\ Documents のサブディレクトリやその下のファイル名を cmd という script にわたす (そのなまえを /Users/yk/Library/Mobile\ Documents/FILE とする).cmd はそれを cmd_1 という script にそのままわたす. cmd はそのディレクトリ名/ファイル名を 1 個の文字列としてうけとるが,cmd_1 はそれが 2 個に分割されたものをうけとる. そこで cmd_1 は最初の文字列 ($1 その内容は "/Users/yk/Library/Mobile") は無視して 2 番めの文字列 ($2 その内容は "Documents/FILE") をあつかう. この文字列の先頭は "Documents" だが,それは /Users/yk/Library/Mobile\ Documents にリンクされているので,意図したディレクトリやファイル (/Users/yk/Library/Mobile\ Documents/FILE) をうけとることができる.

なんでこんなめんどうなことをさせられるのか ?!

キーワード:

トラックバック

このエントリーのトラックバックURL:
https://www.kanadas.com/mt/mt-tb.cgi/7763

コメントを投稿

Google でブログを検索:

メインページアーカイブページも見てください.
Creative Commons License
このブログはつぎのライセンスで保護されています. クリエイティブ・コモンズ・ライセンス.
Powered by Movable Type