$ cat foo
#!/usr/bin/env bash
set -e
echo -n 'echo "$0": '
echo "$0"
echo -n 'echo "$(dirname $(realpath $0))": '
echo "$(dirname $(realpath $0))"
echo -n 'echo "$(dirname "$(realpath "$0")")": '
echo "$(dirname "$(realpath "$0")")"
echo -n 'echo "$(dirname "$(realpath -- "$0")")": '
echo "$(dirname "$(realpath -- "$0")")"
$ foo
echo "$0": /home/sjl/bin/foo
echo "$(dirname $(realpath $0))": /home/sjl/bin
echo "$(dirname "$(realpath "$0")")": /home/sjl/bin
echo "$(dirname "$(realpath -- "$0")")": /home/sjl/bin
$ ./foo
echo "$0": ./foo
echo "$(dirname $(realpath $0))": /home/sjl/bin
echo "$(dirname "$(realpath "$0")")": /home/sjl/bin
echo "$(dirname "$(realpath -- "$0")")": /home/sjl/bin
$ bash foo
echo "$0": foo
echo "$(dirname $(realpath $0))": /home/sjl/bin
echo "$(dirname "$(realpath "$0")")": /home/sjl/bin
echo "$(dirname "$(realpath -- "$0")")": /home/sjl/bin
$ mv foo 'foo bar'
$ 'foo bar'
echo "$0": /home/sjl/bin/foo bar
echo "$(dirname $(realpath $0))": /home/sjl/bin
/home/sjl/bin
echo "$(dirname "$(realpath "$0")")": /home/sjl/bin
echo "$(dirname "$(realpath -- "$0")")": /home/sjl/bin
$ ./'foo bar'
echo "$0": ./foo bar
echo "$(dirname $(realpath $0))": /home/sjl/bin
/home/sjl/bin
echo "$(dirname "$(realpath "$0")")": /home/sjl/bin
echo "$(dirname "$(realpath -- "$0")")": /home/sjl/bin
$ bash 'foo bar'
echo "$0": foo bar
echo "$(dirname $(realpath $0))": /home/sjl/bin
/home/sjl/bin
echo "$(dirname "$(realpath "$0")")": /home/sjl/bin
echo "$(dirname "$(realpath -- "$0")")": /home/sjl/bin
$ mv 'foo bar' -- --help
$ --help
echo "$0": /home/sjl/bin/--help
echo "$(dirname $(realpath $0))": /home/sjl/bin
echo "$(dirname "$(realpath "$0")")": /home/sjl/bin
echo "$(dirname "$(realpath -- "$0")")": /home/sjl/bin
$ ./--help
echo "$0": ./--help
echo "$(dirname $(realpath $0))": /home/sjl/bin
echo "$(dirname "$(realpath "$0")")": /home/sjl/bin
echo "$(dirname "$(realpath -- "$0")")": /home/sjl/bin
$ bash -- --help
echo "$0": --help
echo "$(dirname $(realpath $0))": dirname: invalid option -- 'e'
Try 'dirname --help' for more information.
echo "$(dirname "$(realpath "$0")")": Usage: realpath [OPTION]... FILE...
Print the resolved absolute file name;
all but the last component must exist
-e, --canonicalize-existing all components of the path must exist
-m, --canonicalize-missing no path components need exist or be a directory
-L, --logical resolve '..' components before symlinks
-P, --physical resolve symlinks as encountered (default)
-q, --quiet suppress most error messages
--relative-to=DIR print the resolved path relative to DIR
--relative-base=DIR print absolute paths unless paths below DIR
-s, --strip, --no-symlinks don't expand symlinks
-z, --zero end each output line with NUL, not newline
--help display this help and exit
--version output version information and exit
GNU coreutils online help:
Full documentation at: