Были разговоры (еще в Linux 0.x-1.x дней) о добавлении этого (потому что это было полезно в системах BSD), но, если я правильно помню, были причины, по которым это было труднее сделать прямо в Linux, чем в BSD в то время.
Обратите внимание, что то, о чем вы спрашиваете, - это лишь небольшая часть функции (а именно, вы говорите о записи stty info
для control-T, заставляющей ядро доставить SIGINFO
группе процессов tty
) - эта часть «проста» - но когда ядро сообщает информацию о состоянии процесса, когда оно не обрабатывает сигнал ( потому что в то время очень немногие вещи поддерживали это, функция была в основном о том, «крутится ли этот процесс или зависает» и «что это за процесс в любом случае»). Сложнее - ISTR даже были проблемы с безопасностью / доверием при отображении этой информации точно, и должен ли он быть связан с путем Secure Attention Key. Тем не менее, может быть какая-то ценность в "легкой" версии, которая только посылает сигнал ...
(Из личной памяти; быстрый поиск в Интернете не дает ничего очевидного, но я думаю, что нужно копаться в действительно старые архивы, чтобы найти обсуждение.)
См. справочную страницу для wc -c
.
Выводит bytecount filename
в $line
в виде списка, разделенного пробелами.
Цикл for $woord in $line
считывает первую переменную (до первого пробела )из $list
, который является bytecount
и сохраняет его в $res
. Затем вместо чтения следующего элемента в $list
выполняется инструкция break
и выход из цикла.
Как говорит @ikkachu, есть более простые способы получить bytecount
, чем с помощью цикла.
В for word in $line
,содержимое переменной line
разбивается на слова и затем расширяется для имен файлов (см. также этивопросы). Затем цикл выполняется один раз для каждого результирующего значения (или «слова» ). В этом случае, однако, есть только одна итерация цикла, так как оператор break
останавливает выполнение цикла. В результате значение res
, установленное на этой первой итерации цикла, остается, и эффект такой же, как при выборе первого слова, разделенного пробелом -, из line
.
Были бы лучшие способы написать это, мы могли бы, например,. удалите имя файла с расширениями оболочки. Это выведет23
:
line='23 somefilename'
res="${line%% *}"
echo "$res"
Или просто пусть wc
не выводит имя файла с самого начала, перенаправляя файл на стандартный ввод wc
вместо передачи имени файла на wc
. Сравните эти два:
$ wc -c foo.txt
8 foo.txt
$ wc -c < foo.txt
8