Как распечатать ТОЛЬКО текущий каталог, в котором я сейчас нахожусь
Я пытаюсь найти способ правильно получить только имя каталога, в котором я сейчас нахожусь. Если я в каталоге с именем HW04, и pwd
распечатывает home/zachary/HW04
как бы распечатать только HW04? Или использует pwd для того, чтобы получить имя многим? какие-нибудь более простые методы?
Заранее спасибо.
3 ответа
Вы могли бы использовать echo $(basename $(pwd))
(или просто basename $(pwd)
если вы хотите распечатать его); см. basename (1), pwd (1) (возможно, встроенная оболочка) и раздел подстановки команд bash
справочное руководство.
Вы могли бы найти некоторую конфигурацию приглашения bash, чтобы настроить ваше приглашение сообщать вам такие вещи.
Можно также использовать awk
,
pwd | awk -F'/' '{print $NF}'
Это даст вам только имя текущей папки.
Пример это даст вам, как это
Эй, попробуйте использовать basename home/zachary/HW04
Использование basename Использование команды basename - это самый простой и простой способ извлечь текущий каталог:
basename /usr/local/bin
OutPut будет bin
Однако это не полезно в сценарии оболочки с изменением переменных каталога. Вы можете комбинировать его с pwd внутри обратных кавычек, чтобы сделать его более динамичным:
cd / usr / local / binbasename pwd
bin Использование подстановки параметров с помощью echo Язык сценариев bash полон приятных трюков, включая подстановку параметров, которая позволяет вам манипулировать или расширять переменные. Вы можете использовать подстановку параметров с помощью синтаксиса ${var##pattern}, который удаляет из $var самую длинную часть $Pattern, соответствующую внешнему концу $var. Взгляните на пример:
cd / var / log / squidecho $ {PWD ## * /} squid PWD - это переменная окружения, которая содержит текущий путь, а ## - это инструкция, которая указывает сценарию удалить все, что он находит до * /. Другими словами, он удаляет все до последнего /, оставляя только последнюю строку, которая здесь является текущим каталогом, squid. Вы можете узнать больше о замене параметров и других способах управления переменными в Расширенном руководстве по написанию сценариев.
Использование awk и rev Более сложное решение использует комбинацию awk (утилита сканирования шаблонов) и rev (утилита, которая переворачивает строки из файла или из stdin):
cd / usr / share / cups / datapwd | рев | awk ââ¬âF / '{print $1}' | rev data Шаг за шагом гораздо проще понять этот вид скрипта:
pwd / usr / share / cups / data pwd | rev atad / supc / erahs / rsu / pwd | рев | awk à â â¬âF / '{print $ 1}' atad pwd | рев | awk ââ¬âF / '{print $1}' | rev data Опция -F указывает, что вы должны разделять по полям, где разделитель полей равен /, и что вы должны напечатать поле 1.
Использование sed Наконец, вы можете проанализировать вывод pwd в редакторе потоков sed, используя тщательно продуманное регулярное выражение. Этот подход может быть образовательным, но это не практично:
cd / home / smith / musicpwd | sed 's, ^ (./) \? ([^ /]), \ 2,' music Для лучшего понимания того, как это работает, удалите escape-символ (), который требуется для специальных символов, таких как "(":
sed 's, ^ (./)? ([^ /]), \ 2,'
PWD. В Unix-подобных и некоторых других операционных системах команда pwd (рабочий каталог печати) записывает полный путь текущего рабочего каталога в стандартный вывод. Команда представляет собой оболочку, встроенную в большинство оболочек Unix, таких как оболочка Bourne, ash, bash, ksh и zsh.
pwd Показать текущий рабочий каталог. Пример: / home / foobar
pwd -P Показать физический путь текущего рабочего каталога - без имени символической ссылки, если есть. Пример: если вы находитесь в dir / home / symlinked, то есть в символической ссылке на / home / realdir, это будет показывать / home / realdir
pwd -L Вывести логический путь к текущему рабочему каталогу - с символьным именем ссылки, если есть. Пример: если вы находитесь в dir / home / symlinked, то есть символической ссылке на / home / realdir, это будет показывать / home / symlinked