[最終更新] 2017年2月21日
本記事は、シェルスクリプトの構文をチェックしてくれる便利なソフトshellcheckにおいて、表題のエラー「SC2029: Note that, unescaped, this expands on the client side.」がどのような時に出るのかについて書いたものです。
shellcheckの注意文
shellcheckは、シェルスクリプトの構文チェックをしてくれる便利なソフトウェアです。これを使用して、以下のような注意が出ることがあります。
SC2029: Note that, unescaped, this expands on the client side.
一見したところなんのことかよくわからなかったので、調べました。「https://github.com/koalaman/shellcheck/wiki/SC2029“>SC2029 · koalaman/shellcheck Wiki · GitHub」によると、これはリモートホストで変数を展開したコマンドを実行するときに表示される注意文のようです。
クライアント側の変数かサーバー側の変数化
参考サイトの例文では、以下のコマンドを悪例として示されています。
ssh host "echo $HOSTNAME"
このコマンドは恐らく、リモートホストを表示したいのだろうと思われますが、これを実行すると、実際には $HOSTNAME がクライアント側の変数として展開されてしまい、クライアントのhostnameが表示されてしまいます。これはbashの仕様です。狙った動作をさせるには、この場合$HOSTNAMEの$をエスケープするか、あるいはダブルクォートをシングルクォートにしなければなりません。
さて、今回私のスクリプトでは、以下の状況でこの注意文が表示されました。
ssh hackle@"${hoge}" cat "${file}" >> "${file2}"
変数file はスクリプト内で定義しています。したがって、クライアント側での展開で問題ありません。
If you do want your string expanded on the client side, you can safely ignore this message.
サイトでは以上のように、クライアント側の展開でよければ無視すればいいよ、と書かれていますから、今回この注意メッセージは特に気にする必要はない、ということになります。
まぁ、特に問題になるようなケースではありませんでしたが、bashの変数展開がどのようにされるかについては、よくよく理解しておかねばなりません。色々と気付かせてくれて、shellcheck は便利ですね。
関連記事
シェルスクリプト の記事
- [2017年12月18日] bashでスクレイピングする時のメモ
- [2017年3月22日] Macでカレントディレクトリ内のpngを一括でjpgに変換する(逆も同じ)
- [2017年1月16日] Octaveの使い方、基本事項
- [2017年1月16日] Octaveで反比例の二次元グラフを描画
- [2016年5月9日] Macで複数のpngファイルをpdfに変換する
- ---本記事---
- [2016年2月17日] shellcheck で ls | grep が怒られた…ls の出力をパースしてはいけない?
- [2016年1月28日] Macで複数ページのpdfを一括でjpegにコマンドラインで変換する
- [2015年10月10日] Gnuplot入門クイックツアー 二次元グラフ描画で困らなくなるまで
- [2015年10月1日] gnuplotで日付・時刻の書かれた時系列データを二軸でグラフ描画し保存するシェルスクリプト
スポンサーリンク