This skips the ugly parts around Path::file_name and is technically more correct. All command-line tools I’m aware of show the raw argv[0] in their usage message.
PathBuf isn’t absolute though! If the command was executed with exactly program-name, then the PathBuf parsed will be simply program-name. By taking all of the first argument, you’ll behave correctly.
In fact, most unix programs I know act like this. If you have a unix system, try running:
/bin/ls --help
The result:
Usage: /bin/ls [OPTION]... [FILE]...
it’s absolute! Because it was invoked with an absolute path. If you just run ls, the usage is ls, just like your program will be if you use Path::display.
As @daboross pointed out, most Unix programs do in fact show a bare argv[0] and you only don’t see a path because they are usually not invoked with one. That’s why I’d like to recommend once more that you follow general convention.
If you insist on only showing the last component of argv[0], I’m afraid your solution is about as short as it can get. I must admit, I’m a bit surprised that Path::file_name() returns an OsStr instead of another Path, but maybe someone else is aware of a good reason for that.