Командная строка (PS1) включая количество файлов в каталоге (и скрытые и регулярные записи)

Если нет других столбцов с запятыми, то это решает вопрос подсчета количества строк и запятых:

tr -cd ',\n' < file | wc -c
1
18.11.2018, 11:44
1 ответ
ssh HOST_1 "tail -f MY_LOG_FILE" > MY_NAMED_PIPE

Хвостовая программа будет буферизировать свои выходные данные в блоках размером 8 КБ или около того, поскольку она не записывает данные в TTY. Если MY_LOG_FILE не очень активен, возможно, поэтому вы не видите никаких выходных данных. Даже если бы он работал, хвост не записывает полные строки за раз, поэтому выход из нескольких экземпляров хвоста был бы сильно перепутан.

Можно указать ssh для выполнения команды tail с использованием TTY. Это должно привести к тому, что tail будет буферизован по строкам. Это должно дать лучшие результаты.

ssh -tt HOST_1 "tail -f MY_LOG_FILE" > MY_NAMED_PIPE

Ссылку на страницу ssh man можно найти здесь .

-121--175070-

Ubuntu (и, скорее всего, многие ароматизаторы Debian) хранит информацию в /etc/StartManager/system-connections . Каждое из соединений имеет собственную запись файла. Файлы защищены методом 600 файлов и принадлежат root.

Файлы в этой области относятся не только к настройкам беспроводной связи, но и к информации о проводных соединениях.

-121--68348-
count_glob() { 
     [ -e "$1" ]
     echo "($v=$((!$?*$#)))+"
}

Можно объявить функцию, подобную описанной выше. Тогда вместо ls и остальное вы могли бы просто сделать...

...Currently in: $(($(
    v=c count_glob *
    v=h count_glob .*
)-2)) entries and $((h-2)) are hidden...

Я удалил escape-последовательности только потому, что они не актуальны здесь - это также будет работать с ними.

Так что все вместе сейчас...

export PS1='\[\e[2;37m\]\d \[\e[2;37m\] @ \[\e[2;37m\] \t \[\e[2;33m\]>'\
'Currently in: \[\e[0;33m\] $(($(
    v=c count_glob * 
    v=h count_glob .*
)-2)) entries and $((h-2)) are hidden '\
'\[\e[3;36m\]\u\[\e[0;37m\]@\[\e[1;93m\]\h\[\e[0;33m\] \$\[\e[0m\]'

Итак, в данном случае функция count _ glob предоставляет список аргументов всех файлов (скрытых или нет) в текущем каталоге. Специальный параметр $ # представляет общее число позиционных параметров оболочки - ее аргументов - и каждая функция оболочки получает свой собственный набор этих параметров.

[ -e "$1" ]

... является проверкой, чтобы проверить, действительно ли существует первый аргумент, что фактически не является необходимым в случае . * , потому что всегда есть два . и .. файлы для разрешения - но для * есть шанс, что - если каталог пуст - глобус не разрешится и * все равно будет передан в качестве аргумента. Таким образом, в функции проверка выполняется, и логическое значение, не возвращаемое тестом, умножается на число аргументов. Это работает потому, что, если тест верен, он возвращает 0, а если ложь отличается от нуля - так что умножение на обратное этих цифр работает, чтобы получить ваш счет правильно.

Последний фактор, учитываемый здесь, - это способ обработки арифметики оболочкой. В большинстве случаев вы не можете просто передать определение переменной из подслова в этом пути так легко - но с арифметическим eval вы можете - потому что это действительно eval в самом истинном смысле. Два вызова count _ glob заканчивают печать заявления, которое выглядит так:

$(((c=[num])+(h=[num])+-2))

... и оболочка чтит и присваивает эти цифры - даже для последующих вызовов. Вы можете проверить это по запросу - сделайте эхо «$ h» «$ c» и получите те же значения, что и каждый раз. Полагаю, это может быть полезно для других вещей.

1
27.01.2020, 23:51

Теги

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