thunarのアクションで与える引数の挙動

 昨日の続き。

 普通の場合は特に気にすることはないが、ファイル名にスペースが含まれると挙動がおかしくなる。

 こんなphpスクリプトを作って、実行権限をつけて引数%Fを与えるよう設定し、2つのファイルを選択して右クリックメニューから実行してみる。ファイル名は"/tmp/Screenshot 2.png"と"/tmp/Screenshot 1.png"。

#!/usr/bin/php
<?php
$file='nanchara.txt';
array_shift($argv);
file_put_contents($file, $argv);
?>

 ダブルクオーテーションで囲んだ場合。

a:1:{i:0;s:47:"'/tmp/Screenshot 2.png' '/tmp/Screenshot 1.png'";}

 それぞれのファイル名がシングルクォーテーションで囲まれてひとつの引数として与えられている。

シングルクオーテーションで囲んだ場合。

a:4:a:3:{i:0;s:15:"/tmp/Screenshot";i:1;s:21:"2.png /tmp/Screenshot";i:2;s:5:"1.png";}

  • /tmp/Screenshot
  • 2.png /tmp/Screenshot
  • 1.png

 の3つとなっている。ファイル名中のスペースで分割されているが、本来のファイルの区切りのスペースでは分割されていない。
使えへんがな。

 一応なにも囲まない場合も試してみる。

a:2:{i:0;s:21:"/tmp/Screenshot 2.png";i:1;s:21:"/tmp/Screenshot 1.png";}

 ということから何も囲まない場合がうまく行くはず。なんだが、どうも違うような気がする。

 とりあえずの解決策として、コマンドラインに渡す変数はクォーテーションで囲むというシンプルな解決策を採用。外部コマンドでやっている処理を全部phpでやるという選択肢も考えたが、相対的に手間がかかりすぎるので。