Daily Dev Log: "--help" vs. "man"
We just can’t remember options of CLI tools.
In most cases, --help
, like grep --help
, is the go-to way to look for help.
For example, if you forget what -H
of grep
does.
$ grep --help | grep -- -H
-H, --with-filename print the file name for each match
man
is too formal, wordy and overwhelming, comparing with --help
.
Usually, we can find out most of what we want in the output of --help
, without turning to man
.
In some environments, man
pages may not be available there. One such example is Git Bash for Windows.
Commands in Git Bash for Windows don’t have man pages.
Relying on man
only means you have to google the man(ual) in the browsers.
To save some typing, a bash function can also be added into the ~/.bashrc
.
h() { $1 --help; }
Then type h grep
to show the help.
Note that different commands or different variants of a command may print help text in different verbosity.
For example, the builtin grep
in OS X prints help text like below.
$ grep --help
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [pattern] [file ...]
It’s much less than the Linux grep
’s help text.
(Most of CLI tools support this level of help text at least.)
Daily Dev Log: "su - app" vs. "su app"
From man su
,
-, -l, --login Provide an environment similar to what the user would expect had the user logged in directly.
So with su - app
, after switch to the user app
, you end up in the user’s HOME directory,
and have the user’s ~/.bash_profile
(not ~/.bashrc
) executed.
Tools like RVM need a “login shell”.
RVM by default adds itself currently to ~/.bash_profile file
So if use su app
, RVM will not be ready there for you after su
.
Daily Dev Log: Avoid the Pitfall of Using the Same File to Redirect Input and Output
Pitfalls
Do Not Use the Same File to Redirect Input and Output
tr -d '\015' <DOS-file >DOS-file
The above command will delete all content in the file!
From man bash
,
[n]>word, if it does exist it is truncated to zero size.
(How did I find the file back? Luckily, the working directory is managed by Dropbox, and I found it back in the Dropbox.)
CLI
Convert Line Endings from DOS/Windows Style to Unix/Linux Style
tr -d '\015' <DOS-file >UNIX-file
(For what character \015
is, see man 7 ascii
or ascii '\015'
if the ascii
command is installed.)
More ascii Command Examples
$ ascii '\r'
ASCII 0/13 is decimal 013, hex 0d, octal 015, bits 00001101: called ^M, CR
Official name: Carriage Return
C escape: '\r'
Other names:
Search Manuals
-k Search the short descriptions and manual page names for the keyword
$ man -k ascii
ascii (1) - report character aliases
ascii (7) - ASCII character set encoded in octal, decimal, and hexadecimal
...
Daily Dev Log: Find Lines in One File but Not in Another
We can use comm
to find lines in one file but not in another file
# fine lines only in file-a
comm -23 file-a file-b
From comm --help
,
-2 suppress column 2 (lines unique to FILE2)
-3 suppress column 3 (lines that appear in both files)
So to find lines exist in both file-a and file-b.
comm -12 file-a file-b
Google keywords: “linux command two file not contain” hit link