☰ Menu
CLI Open source

odo for Mac

odo

odo - an atomic odometer for the command line

odo — overview

odo - an atomic odometer for the command line

Atomic Odometer? What?

odo atomically updates a count in a file, which will be created if not present. The count is text-formatted (e.g. "00012345n"), and will be accurately incremented or reset even when multiple processes attempt to change the counter at the same time. (It uses memory mapping and atomic compare-and-swap operations to eliminate race conditions.)

Use cases

This could be used to track some intermittent event, like services being restarted. (This was the original inspiration.) Since the counter is just a number in a text file, it's easy to compose odo with other tools.

Dependencies

odo depends on atomic compare-and-swap functionality (e.g. __sync_bool_compare_and_swap), which is available on most common platforms. The build is currently tested on Linux, OpenBSD, and OSX on x86 and x86-64 systems, as well as on a Raspberry Pi (32-bit ARM).

If the gcc-specific feature defines in types.h are not recognized by your C99 compiler, you may need to set COUNTER_SIZE in the Makefile yourself: -DCOUNTER_SIZE=4 for 32-bit systems and -DCOUNTER_SIZE=8 for 64-bit systems.

Getting started

To build it, just type:

$ make

To install it:

$ make install

To run the tests:

$ make test

Example Use

This atomically increments a counter in /log/restarts. If the counter file does not exist, it is created as 0 and incremented to 1.

$ odo /log/restarts

Same, but print the updated count:

$ odo -p /log/restarts

Reset the count to 0:

$ odo -r /log/restarts

Set the count to a number (for testing notifications, perhaps):

$ odo -s 12345 /log/restarts

Print the current counter value without incrementing:

$ odo -c /log/restarts

Print usage / help:

$ odo -h

Note

odo's atomicity is only as reliable as the underlying filesystem's. Inconsistencies may still occur if used on a non-local filesystems such as nfs.

Details

命令行的原子里程表

How to install odo

  1. Open Terminal (press ⌘ + Space and type “Terminal”).
  2. If Homebrew is not installed yet, run the command below first.
  3. Run this command:

Latest 10 releases

This project has no GitHub releases yet.

Prebuilt bottle platforms

Official Homebrew bottles cover:

  • Apple silicon · latest macOS
  • Apple silicon · macOS 26 Tahoe
  • Apple silicon · macOS 15 Sequoia
  • Apple silicon · macOS 14 Sonoma
  • Apple silicon · macOS 13 Ventura
  • arm64_monterey
  • arm64_big_sur
  • Intel · macOS 14 Sonoma
  • Intel · macOS 13 Ventura
  • Intel · macOS 12 Monterey
  • big_sur
  • Linux · ARM64
  • Linux · x86_64

Cannot be installed alongside: odo-dev。

To use both, first brew uninstall the conflicting package, or install it in an isolated environment.

Compared with similar apps

Only public metadata is compared, with no subjective recommendation; see the compare pages for field-by-field comparisons.

Compared with similar apps
AppVersionLicenseArchitecture30-day installs
odo0.2.2ISCCLI0
libatomic_opsv7.10.0MIT AND Boehm-GC AND GPL-2.0-or-laterCLI46
openssl@4openssl-4.1.0Apache-2.0CLI494,798
xzv5.8.40BSD AND GPL-2.0-or-laterCLI346,605

Similar apps: Command-line Tools

Leave a comment

评论表单加载中…