ラジオのコーナーに送るようなやつ書いてみたかったから書いた

これは以前起こった怖い話
わかる人からするとただの笑い話です

 

仕事でとあるシステムのリグレッションテストを担当していた私は例によって例のごとく、前日に行われた機能改修に伴ってテストの実行をするよう指示がありました。
その都合上、試験用のサーバー上にテストを実行するためのシェルをいくつか格納し、シェルの動作確認をする必要があります。

 

リグレッションテストという言葉になじみがない人のためにざっくり説明すると、システムとかを改修したとき、
今まで動いていたものがちゃんと動くか確認するテストをリグレッションテストと言います。
「前できてたはずなのにできなくなってる」を避けるためのテストです。

シェルについてはあれです、ダブルクリックしたりとかで実行したら指示しておいた行動を勝手にわーっとやってくれるものです。

 

今回実行するシェル自体の動作はかなり単純なもので、
とあるシステムファイルに対して文章を1行追記するものと、追記した文字列を削除するといったものの2種類です。

環境が変わったこともあり、編集先のファイルのパスだとかサーバーのIPアドレスだとかを確認しながら調整し、動作確認をした時、事件が起こりました

 

「/bin/bash^M: 誤ったインタプリタです: そのようなファイルやディレクトリはありません」


バッチ実行時にエラーを吐いているのです。

おかしい、このシェルは誰でも見れる所には置いてはあるが、普段から編集や実行するようなものではない。
少なくとも私以外に触る人はいないはず。

若干の違和感を覚えつつ、再度調整して実行します。
また同じエラー。

 

一応他のメンバーにも確認はしましたが、ファイルの存在自体を知っている者は私の他に2名いるのみで、全く触れていないとのこと

いくら私がこれまでシェルをろくに弄ったことが無いとはいえ、基本的な内容は使用頻度も高めのただのLinuxコマンド
ここまで沼に嵌るものかと思いつつ手元の他のデバイスで検索をしながら実行を繰り返します。

 

しばらく着手しても改善が見られない上、他にも動作確認をする必要がある項目があったので、

一度頭の中をリセットする事も兼ねてシェルを一旦放置して他の作業を進めます。

 

 

他作業を終えてしばらく経った頃です、とあるサイトが目に留まりました。
そのサイトにははっきりとこう書かれていました。

 

「改行コードが \r\n となっている場合があるので、\rを取り除く必要がある」

 

そんな馬鹿な理由で??ファイルも変更して無いのに??と目を疑いました。
そして半信半疑で文字の置換を行い、シェルを再実行しました。


動きました

 

こいつ

 

 


はい

 

改行コードが含まれた原因は不明ですが、おそらく誰かがファイルを意図せずに開いたか、
リモート先のPCにファイルをコピーしたりとかしている間に何かしら変換が起こったんだと思います。こんなこと長々と考えても仕方ねぇや


作業に詰まった際、原因を調べるときは深読みせず、考え無しに直球な検索ワードの方が沼に嵌らない、という教訓でした。


これだから文字コード嫌い、目に見えてくれ
ヤード・ポンド法とかもあるけど、それに並んで文字コードでの論争もあるのも頷けますわ

 

ついでに、シェルの先頭行に堂々と書かれてる「#!/bin/bashがただのディレクトリのパスじゃないことも初めて知れました。
所謂「おまじない」というやつですね。学びです。