Все эти демоны используют WebKit (в основном для отображения подсказок входа в систему oauth2 ), а WebKit недавно представил gigacages для изоляции кучи, используемой их реализацией JS. Выделение для гигабайта достаточно велико, чтобы любой доступ к произвольному беззнаковому 32-битному смещению все равно попадал бы в гигабайт, что приводило к таким огромным выделениям. См. этот пост в блоге для получения более подробной информации о гигабайтах:https://labs.mwrinfosecurity.com/blog/some-brief-notes-on-webkit-heap-hardening/
Вы можете использовать модификаторы расширения параметров оболочки:
$ pathname="/home/paulo/paulo.pdf"
$ filename=${pathname##*/}
$ printf "%s\n" "$filename"
paulo.pdf
$ basename=${filename%.*}
$ printf "%s\n" "$basename"
paulo
${pathname##*/}
расширяется до содержимого pathname
за вычетом самого длинного префикса, соответствующего */
, , то есть полный путь (, если он есть ). ${filename%.*}
расширяется до содержимого filename
за вычетом кратчайшего суффикса, соответствующего .*
, , то есть расширения файла (, если оно есть ).
Обратите внимание, что при этом удаляется только последний компонент имени файла, представленный точкой; поэтому paulo.tar.gz
станет paulo.tar
, а не paulo
. Строго говоря, расширение.gz
(— это сжатый файл, который оказывается архивом; расширение .tar
становится действительно значимым только после извлечения файла ).
Это также не работает правильно для файлов с расширением -без точек -, , например..bashrc
или .zshrc
;basename
оказывается пустым. Для этого можно использовать значения по умолчанию :
$ pathname="/home/paulo/.zshrc"
$ filename=${pathname##*/}
$ printf "%s\n" "$filename"
.zshrc
$ basename=${filename%.*}
$ printf "%s\n" "$basename"
$ printf "%s\n" "${basename:-$filename}"
.zshrc
В оболочке zsh
:
$ pathname=/home/paulo/paulo.pdf
$ printf '%s\n' $pathname:t:r
paulo
:t
("хвост" )извлекает последний компонент пути в$pathname
(он работает какbasename
). :r
("корень", полагаю )извлекает бит имени файла до расширения, если оно есть. Расширение — это часть имени файла, которая стоит после последней точки. Это означает, что вы получите пустой результат для таких имен файлов, как .zshrc
. Другой связанный модификатор:
:h
("голова" ), которая работает как dirname
, и :e
("расширение" ), которое извлекает только расширение. Это должно делать то, что вы хотите:
pathname="/home/paulo/paulo.pdf"
printf "%s\n" "$(basename $pathname)" | sed "s/\..*$//"