Linuxコマンドラインで「&」を受け取る方法

and-839659_1280
LINEで送る
Share on GREE
Share on LinkedIn

本日仕事で思わぬところでつまずいてしまったので、備忘録をメモっておきます。

まずやろうとしたことは、とあるWEBサイトのソースコードを取得するプログラムを作成することになったので、
安易にPHPでfile_get_contents関数でURLを指定すれば、ソースコードがファイルに保存されるプログラムを構築した。

phpでURL指定

上記のようなソースコードを下記実行してみました。

この状態であればさほど問題ではないのだが、&文字列が含まれる場合エラーになってしまう。

これは、「&」という文字列が、linuxコマンドの「バックグラウンドでコマンドを実行する」という命令の為、コマンドラインの中に含まれていると、文字列ではなく、命令として認識されてしまう。
&の次の文字列がコマンド実行命令として判定され、bbbが文字列ではなく、実行コマンドになるので、「そんなコマンドないよ」とbashエラーが出てしまうのである。

shellでもtry

大したプログラムではないが、受け渡しの引数1番目をそのまま表示するコードなのだが、
これをPHPと同じように実行すると

さらに&文字列が入ると・・・

PHPとほとんど同じエラーが出ています。
そらそうですよね。コマンドラインということでbashで動いているわけですから。

解決

これを解決するのは非常に簡単で&をエスケープするだけでした。

\&

こんなに簡単なのに、2時間も費やしてしまいました。
脳みその老化なのかと少し自分で心配になってしまうぐらい・・・

shellもphpもどちらも問題なく値が受け取れました。
改めて最近頭がカッチカチになっている気がするので、脳トレでも頑張ろうかと検討中!!!

関連リンク

http://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230589/?rt=nocnt

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*