Функция Bash, не работающая в Zsh

Размер резидентного набора процесса является объемом памяти, который принадлежит ему и в настоящее время существует (резидентный объект) в RAM (реальная RAM, не подкачанная или иначе не - резидентный объект).

Например, если процесс выделяет блок памяти (скажите, что 100 МБ), и использует его активно (читает/пишет в него), его размер резидентного набора составит приблизительно 100 МБ (плюс издержки, сегмент кода, и т.д.). Если после того, как процесс затем прекращает использовать (но не выпускает), что память некоторое время, ОС могла решить подкачать блоки той памяти, чтобы подкачать, создать место для других процессов (или кэш). Размер резидентного набора затем уменьшил бы суммой выгруженное ядро. Если бы процесс просыпается и начинает снова использовать ту память, ядро перезагрузило бы данные из подкачки, и размер резидентного набора повысится снова.

ru_maxrss поле struct rusage "метка паводка" размера резидентного набора. Это указывает на пиковое использование RAM для этого процесса (при использовании RUSAGE_SELF).

Можно ограничить размер резидентного набора процесса, чтобы не иметь отдельное приложение, "съедают" всю RAM в системе и том, чтобы вынуждать другие приложения подкачать (или перестать работать полностью с условиями из памяти).

6
30.12.2012, 22:50
2 ответа
  • local встроенное, не ключевое слово, таким образом, local files=(…) не анализируется как присваивание массива, но как строковое присвоение. Запишите присвоение отдельно из объявления. (Уже найденный llua, но примечанием, которое необходимо инициализировать files к пустому массиву или объявляют переменную с typeset -a, иначе массив запускается с побочного пустого элемента.)
  • Массивы Zsh пронумерованы от 1, не от 0 как в ударе и ksh, таким образом, ${files[0]} должен быть записан $files[1]. С другой стороны, скажите zsh вести себя способом, что это более совместимо с ksh и ударом: поместить emulate -L ksh в начале функции.
  • Если Вы не идете emulate маршрут, Ваш _notes функция распечатает zsh: no matches found: foo* если нет никакого завершения для foo, потому что значением по умолчанию, несоответствующим шарикам, инициировали ошибку. Добавьте спецификатор шарика N получить пустой массив, если там не идет ни в какое сравнение и тестируют, пуст ли массив.
  • Существует другая ошибка в Вашем _notes функция, которая влияет на примечания в подкаталогах: необходимо снять префикс до завершения, так, чтобы если, например. ~/notes/foo/bar существует и Вы вводите n b<TAB>, COMPREPLY набор должен содержать b, нет foo/b.

Если Вы хотите сохранить файл, это читаемо и ударом и zsh:

type emulate >/dev/null 2>/dev/null || alias emulate=true
function n() {
  emulate -L ksh
  local arg; typeset -a files
  for arg; do files+=( ~/".notes/$arg" ); done
  ${EDITOR:-vi} "${files[@]}" 
}

function nls() {
  tree -CR --noreport $HOME/.notes | awk '{ 
      if (NF==1) print $1; 
      else if (NF==2) print $2; 
      else if (NF==3) printf "  %s\n", $3 
    }'
}

# TAB completion for notes
function _notes() {
  emulate -L ksh
  local x files
  files=($HOME/.notes/**/"$2"*)
  [[ -e ${files[0]} ]] || return 1
  COMPREPLY=()
  for x in "${files[@]}"; do
    COMPREPLY+=("$2${x#$HOME/.notes*/$2}")
  done
}
complete -o default -F _notes n

Если Вы хотите портировать свой код на zsh:

function n() {
  local files
  files=(${@/#/~/.notes/})
  ${EDITOR:-vi} $files
}

function nls() {
  tree -CR --noreport $HOME/.notes | awk '{ 
      if (NF==1) print $1; 
      else if (NF==2) print $2; 
      else if (NF==3) printf "  %s\n", $3 
    }'
}

# TAB completion for notes
function _notes() {
  setopt local_options bare_glob_qual
  local files
  files=(~/.notes/**/$2*(N))
  ((#files)) && COMPREPLY=($2${^files##~/.notes*/$2})
}
complete -o default -F _notes n
6
27.01.2020, 20:26
  • 1
    Спасибо Gilles. С незначительным редактированием zsh-портированные n () функционируют работы; но _notes () функция все еще перестал работать без соответствующих соответствий. Эмуляция не работает вообще (открывает файловый браузер Vim). Сделайте мне нужна некоторая другая конфигурация в моем .zshrc? Я чувствую, учитывая качество двух ответов, что должен пропускать что-то. –  jasonwryan 01.01.2013, 03:52
  • 2
    @jasonwryan я протестировал n и выполнение _notes вручную (я не протестировал с эмуляцией завершения удара) в zsh -f, и оба, кажется, работают. Отправьте трассировку выполнения n и _notes с set -x. файл трассировки –  Gilles 'SO- stop being evil' 01.01.2013, 04:01
  • 3
    : Я не уверен, что это настолько полезно... Хотя это действительно показывает массив, берущий все файлы; заполнение клавишей Tab все еще перестало работать. –  jasonwryan 01.01.2013, 04:33
  • 4
    @jasonwryan трассировка от n корректные взгляды, что случилось с ним? _notes взгляды на его второй аргумент, таким образом, необходимо протестировать его с _notes _ irc. –  Gilles 'SO- stop being evil' 01.01.2013, 04:36
  • 5
    "массивы Zsh пронумерован от 1, не от 0 как в ударе и ksh, таким образом, $ {файлы [0]} должны быть записанным $files [1]", О, ужас огромное спасибо ;( –  yPhil 12.03.2016, 04:38

набранная (локальная) команда zsh не может определить массивы с, он - синтаксис. Можно создать массивы, но Вы не можете также установленные значения все в одной команде.

function n() {                                                         
local arg files; for arg; do files+=( ~/.notes/$arg ); done
vim ${files[@]}
}

один путь состоит в том, чтобы зафиксировать его.

2
27.01.2020, 20:26
  • 1
    Upvoted:спасибо. какое-либо предложение относительно того, как заставить сценарий завершения работать в zsh? –  jasonwryan 31.12.2012, 04:46
  • 2
    функция n мог также читать n() { $EDITOR "${@/#/.notes/}"; } и предотвратите цикл при работе в ударе и zsh –  llua 09.01.2013, 05:45

Теги

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