Я использую команду realpath
, но она всегда добавляет исходный ввод в конце пути:
$ pwd
/homes/yosefkl
$ realpath yosefkl
/homes/yosefkl/yosefkl
Вы указали realpath
относительный путь к файлу в текущем каталоге.
Файл (который может быть каталогом) может существовать или не существовать. realpath
не волнует по умолчанию. Он сообщает путь независимо от того, существует ли его последний элемент.
Если вы хотите, чтобы он сообщал только о существующих путях, используйте флаг -e
:
zanna@toaster:~/playground$ realpath playground
/home/zanna/playground/playground
zanna@toaster:~/playground$ realpath ~/playground
/home/zanna/playground
zanna@toaster:~/playground$ realpath -e playground
realpath: playground: No such file or directory
Это потому, что вы даете ему путь, который не существует, поэтому он просто распечатывает текущий каталог и все, что вы ему дали, предполагая, что это будет путь. Обратите внимание, что в справочной странице указывается, что:
Распечатать разрешенное абсолютное имя файла; должны существовать все, кроме последнего компонента
Таким образом, он допускает выполнение с несуществующей целью. Чтобы проиллюстрировать это, рассмотрим следующие примеры:
$ pwd
/home
$ ls
lost+found terdon
$ realpath terdon
/home/terdon
$ realpath nonExistentDir
/home/nonExistentDir
Или, чтобы дублировать то, что вы сделали:
$ pwd
/home/terdon
$ realpath terdon
/home/terdon/terdon
Нет, это только говорит о том, что путь к (возможно, не существующему) файлу yosefkl
, расположенному в текущем каталоге (/homes/yosefkl
), равен /homes/yosefkl/yosefkl
. Попробуйте
realpath "$PWD"