Вот быстрое -и -грязное частичное решение, совместимое с любой оболочкой, включая busybox
.
Более узкая проблема, которую он решает, состоит в том, что :вывод полного stdout
на одну консоль и фильтрация на другой, без временных файлов или именованных каналов.
tty
. Предположим /dev/pty/2
. the_program | tee /dev/pty/2 | grep ImportantLog:
Вы получаете один полный журнал и один отфильтрованный.
Путь выводится командой cd -
в конце. Он печатает путь, чтобы вы могли видеть, в каком рабочем каталоге вы оказались. Это особое поведение cd
при вызове с операндом-
(одиночным дефисом ), и в этом случае он эквивалентен
cd "$OLDPWD" && pwd
Чтобы избежать этого, вы можете использовать cd "$OLDPWD"
вместо(OLDPWD
— это специальная переменная, которая будет содержать значение предыдущего рабочего каталога ), но обратите внимание, что еслиcd /tmp
не удалось и ваш код выводит NO
, то и cd -
, и cd "$OLDPWD"
могут привести вас в неожиданный каталог.
Вместо этого используйте
(
cd /tmp
if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then
echo YES
else
echo NO
fi
)
Первый cd
не повлияет на рабочий каталог вне подоболочки (...)
.
Кроме того, ваш тест будет намного безопаснее и эффективнее выполняться с
if [[ $PWD == */tmp ]]; then
echo YES
else
echo NO
fi
Переменная PWD
будет содержать путь к текущему рабочему каталогу, и ее часто нужно использовать вместо команды pwd
. Тест просто проверяет, заканчивается ли путь к текущему рабочему каталогу строкой /tmp
, что, по-видимому, и ваш код awk
хочет сделать (, но не сможет сделать, если путь содержит символы новой строки ). ].
Если все, что вам нужно, это проверить, возможно ли cd
в /tmp
, но не делать этого на самом деле, используйте
( if cd /tmp; then echo YES; else echo NO; fi )
В системах с внешней cd
утилитой, такой как macOS и Solaris, вы можете использовать ее следующим образом:
if /usr/bin/cd /tmp; then
echo YES
else
echo NO
fi
Внешняя cd
утилита никогда не может быть использована для изменения рабочего каталога, но она все же может быть полезна в тестах, подобных этим, которые определяют, будет ли возможен переход в конкретный каталог . См. также В чем смысл внешней команды `cd `?
Если вы хотите проверить, существует ли /tmp
и является ли он каталогом (или символической ссылкой на каталог ),то наиболее распространенный способ сделать это не с cd
, а с таким тестом:
if [ -d /tmp ]; then
echo YES
else
echo NO
fi