Как узнать, действительно ли я нахожусь в месте расположения символической ссылки из командной строки?

Это некрасиво, но работает

cat my_data | sed -e 's/./ &/g' -e 's/^ \(.\) \(.\) \(.\) \(.\)  /\1\2\3\4/'

В первом выражении перед всеми буквами ставится пробел. Следующая удаляет пробелы из первой части.

Вы также можете создать сценарий:

#! /bin/bash
while read ID NUMBERS; do
    echo $ID$(echo $NUMBERS | sed -e 's/./ &/g')
done

и затем запустить

cat my_data | ./my_script
33
19.12.2016, 01:47
4 ответа

В зависимости от того, как настроена ваша команда pwd , она может по умолчанию показывать логический рабочий каталог (вывод by pwd -L ), который покажет расположение символической ссылки, или физический рабочий каталог (вывод pwd -P ), который игнорирует символическую ссылку и показывает " реальный "каталог".

Для полной информации вы можете сделать

file "$(pwd -L)"

Внутри символической ссылки будет возвращено

/path/of/symlink: symbolic link to /path/of/real/directory
56
27.01.2020, 19:37

Обратите внимание, что pwd на самом деле является встроенной оболочкой. В зависимости от вашей оболочки и ее конфигурации результаты могут измениться. Для более портативного решения следует использовать /bin/pwd. Фрагмент из страницы руководства:

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

       --help display this help and exit

       --version
              output version information and exit

       If no option is specified, -P is assumed.

       NOTE:  your  shell  may  have  its  own  version of pwd, which usually supersedes the version described here.  Please refer to your shell's documentation for
       details about the options it supports.

В общем, вы можете определить полный канонический путь к любому файлу/каталогу, используя readlink -f. readlink -f . работает аналогично pwd -P.

17
27.01.2020, 19:37

По сути, вы спрашиваете, есть ли возможность показать фактический путь к текущей рабочей директории. Ну, есть, с помощью python и функции os.getcwd()

То, что вы видите ниже, это небольшой тест из каталога "VirtualBox VMs", расположенного в моей домашней директории. На самом деле это симлинк на другой каталог, расположенный на другом жестком диске, смонтированном по адресу /mnt/HDD.

bash-4.3$ file "$(pwd)"
/home/xieerqi/VirtualBox VMs: symbolic link to /mnt/HDD/VirtualBox VMs/
bash-4.3$ python -c 'import os; print os.getcwd()'
/mnt/HDD/VirtualBox VMs

Как видите, python os.getcwd() разрешает реальный путь к директории, а не путь симлинка.

1
27.01.2020, 19:37

Вы действительно находитесь в / home / cpm135 / public_html / class - это единственный правильный ответ на вопрос «какой у меня текущий рабочий каталог».

Когда вы ссылаетесь на / var / lib / class ... это не совсем о том, где вы находитесь, а о , какой путь вы использовали, чтобы попасть туда .

Когда вы запускаете / bin / pwd , он определяет ваш текущий рабочий каталог, глядя на файл. и .. каталоги (перечисленные в верхней части ls -la ), определяя, какой каталог в .. совпадает с. а затем работать в обратном направлении, пока .. и. относятся к тому же каталогу. Как только это будет сделано, он узнает, какой у вас текущий рабочий каталог.

Когда вы запускаете встроенную оболочку pwd , она не следует этой процедуре (хотя при необходимости может и делать некоторые из них) - вместо этого она запоминает путь, который вы выбрали для получения здесь. Таким образом, каждый раз, когда вы выполняете команду cd , ваша оболочка запоминает это как часть пути к тому, где вы находитесь сейчас, а pwd выводит то, что он вычислил на основе всех cd команды, которые вы выполнили, которые могут быть, а могут и не быть вашим фактическим рабочим каталогом.

Все может стать действительно странным, когда вы выполняете ln -s. foo и сохраните cd в foo - / bin / pwd скажет, что вы все еще находитесь в том же каталоге, но встроенная оболочка pwd скажет, что вы находитесь в / foo / foo / foo / foo / foo / foo - даже если такой каталог на самом деле не существует.(Тем не менее, вы, вероятно, можете добавить в него cd .)

Другой источник путаницы возникает, если каталоги переименовываются. / bin / pwd сразу же заметит изменение, но встроенный pwd не будет, пока вы не сделаете что-то, что говорит ему, что старое имя каталога не имеет значения. .

3
27.01.2020, 19:37

Теги

Похожие вопросы