Реальный текущий каталог [дубликат]

Просто используйте флаги:

$ awk '/PATTERN1/{flag=2;next} flag; /PATTERN2/{flag--}' file
a
b
c
PATTERN2
d
e
f
PATTERN2

То есть: когда вы найдете ШАБЛОН1 , установите флаг в положительное значение; в частности, 2. Затем, когда вы найдете ШАБЛОН2 , уменьшите этот флаг на один. Таким образом, он иссякнет после второго матча. Между ними используйте флаг как значение, которое запускает {print $ 0} , когда оно имеет истинное значение (2 или 1).

3
27.05.2016, 16:45
3 ответа

Используйте

$ env pwd

или

$ /bin/pwd

Если не установлена ​​переменная POSIXLY_CORRECT, и в этом случае вам нужно добавить -P .


Подробности:

Оболочка имеет встроенную команду pwd , которая по умолчанию выводит значение $ PWD оболочки. При этом он может включать логических путей (по умолчанию -L ).

Если вы вызываете встроенную с помощью ( -P ) или используете внешний / bin / pwd :

$ ln -s . /tmp/here; cd /tmp/here/here/here

$ pwd
/tmp/here/here/here

$ pwd -P
/tmp

$ /bin/pwd 
/tmp

Причина в том, что внешний / bin / pwd по умолчанию используется параметр -P .
Из info pwd :

эта реализация использует -P 'по умолчанию, если не установлена ​​переменная среды POSIXLY_CORRECT'.

1
27.01.2020, 21:16
pwd -P

(в любой оболочке POSIX) - это команда, которую вы ищете.

-P предназначен для физического (в отличие от логического ( -L , по умолчанию), где pwd в основном) выгружает содержимое $ PWD (которое оболочка поддерживает на основе аргументов, которые вы даете cd или pushd )).

$ ln -s . /tmp/here
$ cd /tmp/here/here
$ cd ../here/here
$ pwd
/tmp/here/here/here
$ pwd -P
/tmp
4
27.01.2020, 21:16

Использование Python также работает:

python -c "import os; print(os.path.realpath('.'))"
0
27.01.2020, 21:16

Теги

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