В качестве дополнения к ответу Занны опция --value
для systemctl show
была введена в версии 230 systemd . Поэтому он может быть недоступен в некоторых дистрибутивах, таких как Debian Jessie.
В этом случае можно эмулировать опцию с помощью sed:
$ systemctl show -p ActiveState sshd | sed 's/ActiveState=//g'
active
$ systemctl show -p SubState sshd | sed 's/SubState=//g'
running
Команда find была бы более подходящей:
find. -name 'cats.py' -exec cat {} \;
Используйте команду find
. Он может найти файл и запустить над ним команду. ls
имеет проблемы, особенно если задана опция -l
, так как тогда у вас гораздо больше данных, чем вам нужно (файл -режим, дата, владелец,... ).
т.е. (подставляем биты в «»)
find «directory» -name '«file-name-glob-pattern»' -exec «command» {} \;
напр.
find. -name 'cats.py' -exec cat {} \;
Это некрасиво, но, кажется, делает то, что вы просили.
cat `sudo ls -R -l -t -r | grep cats | awk '{print $9}'`
cat `sudo ls -R -l -t -r | grep `Local\ State` | awk '{print $9}'`
Альтернатива find -exec
, используйте расширенное подстановочное значение:
shopt -s extglob
cat **/cats.py
Дополнительно :отключить опцию extglob:
shopt -u extglob
Обратите внимание, что это похоже на -exec cat {} +
вместо-exec cat {} \;
Первые запуски:
cat file1 file2 file3
Последний работает:
cat file1
cat file2
cat file3
В этом примере вывод такой же, но первый будет работать быстрее.