0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOS で timeout がない!? 自作してみた話

Last updated at Posted at 2025-09-21

先日、macOS でシェルスクリプトを書いていたら、思わぬ落とし穴にハマりました。
「えっ、timeout コマンドがない…?」

Linux では当たり前に使える便利コマンドなのに、macOS では最初から入っていないんです。timeout は GNU coreutils の一部なので、Linux なら標準で使えるのですが、macOS に入っているのは BSD 系の coreutils。つまり timeout は存在しません。

とりあえず Homebrew で GNU coreutils を入れてみました:

brew install coreutils

すると確かに timeout …いや、正確には gtimeout が使えるようになります。そう、Homebrew は衝突を避けるためにすべてのコマンドに g を付けてインストールするんです。だから ls なら glscat なら gcat、そして timeout なら gtimeout

これ、普段自分だけで使うなら別にいいんですけど、クロスプラットフォームのシェルスクリプトを書こうとすると一気に不便になります。macOS では gtimeout、Linux では timeout と書き分けないと動かない。もちろん Homebrew には g を取る方法もあるんですが、それをやるとシステムの lscat まで GNU 版に置き換わってしまって、ちょっと怖い。

そこで考えました。
「じゃあ、timeout だけ自分で作っちゃえばいいじゃん!」

というわけで、GNU 版と互換性をできるだけ保ちながら、シンプルに timeout だけを再実装しました。これなら余計なコマンドを上書きすることもなく、必要なものだけ導入できます。

リポジトリはこちらです:
👉 https://github.com/aisk/timeout

さらに Homebrew の tap も用意したので、インストールは超簡単:

brew install aisk/homebrew-tap/timeout

これで Linux と同じように timeout がそのまま使えるようになります。もう gtimeout に悩まされることもありません。

もともとは自分のために作ったツールなんですが、もし同じことで困っている人がいれば、ぜひ使ってみてください。そしてもし気に入ってもらえたら、GitHub でスターをポチっとしてもらえると泣いて喜びます(笑)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?