Сценарий пепла Busybox не выходит чисто после выполняющейся кошки; не мог получить код выхода

Я сделал <F4> ключ, по-видимому, работает во всех режимах при помощи map <expr> выражение отображается следующим образом:

MapOptToggle <F4> relativenumber
MapOptToggle! <S-F4> number

command! -bang -nargs=+ MapOptToggle call <SID>MapOptToggle(<bang>0, <f-args>)
function! s:MapOptToggle(bang, key, opt)
  function! s:ToggleOpt(opt)
    if mode() =~# '\vno?' || !&showmode
      exec 'set ' . a:opt . '! ' . a:opt . '?'
    else
      exec 'set ' . a:opt . '!'
    endif
    redraw
    return ''
  endfunction
  let a='noremap'
  let b='<unique> <silent> <expr> ' . a:key . ' <SID>ToggleOpt(' . string(a:opt) . ')'
  exec a . ' ' . b
  exec a . '! ' .  b
  exec 'set ' . (a:bang ? 'no' : '') . a:opt
endfunction

Но тем не менее мой ответ не объясняет непредсказуемое поведение imap карта режима вставки.

2
19.12.2013, 14:49
2 ответа

Вы неправильно истолковываете вывод.

Это просто, что те файлы (cmdline, окружите...), не завершаются символом новой строки.

Так, например, если /proc/pid/cmdline содержит xxx, cat /proc/pid/cmdline произведет xxx, но потому что нет никакого символа новой строки (который терминальная дисциплина преобразовывает на выводе в CRLF), курсор не вернется к началу строки (CR), ни понизится одним (LF).

Затем на выход, Ваша оболочка произведет свою подсказку для ожидания следующей команды, таким образом, Вы будете видеть что-то как:

xxx$ 

и если существует a echo $?, это будет:

xxx0
$ 

Если файл содержит больше, чем xxx, это может стать более сбивающим с толку.

Если Вы хотите, чтобы символ новой строки был добавлен, когда он отсутствует, Вы могли использовать cut вместо cat:

#! /bin/sh -
cut -b1- < "$1"
1
27.01.2020, 22:22
  • 1
    , возможно, tr '\0' '\n' ? –  glenn jackman 21.12.2013, 02:03
  • 2
    Почти, но не совсем. Я понимаю, что это не производит новую строку. Разъясниться, вместо наблюдения xxx$ Я только вижу xxx без него перерисовывающий подсказку или печатающий echo $?, и просто ожидает следующей команды. Курсор находится все еще на xxx строка, поскольку Вы указываете на это, должна быть. –  user54945 21.12.2013, 18:42
  • 3
    Итак, почему это не перерисовало бы подсказку? Сценарий действительно выходит? –  user54945 21.12.2013, 18:49

Я вижу, если 1$ оценивает к пустой строке, этому cat ожидание должно читать из stdin. Затем необходимо поразить Ctrl-D или Ctrl-C близкой кошке, таким образом, сценарий может продолжиться. Для этой проблемы а именно, я попробовал бы

cat "${1:-/dev/null}"

Так, чтобы, если 1$ пуст или сброс, то, по крайней мере, кошка заставляет допустимое имя файла с конечным содержанием продолжать работать.

0
27.01.2020, 22:22
  • 1
    Да, забудьте, что и предполагают, что имя файла указано. –  user54945 19.12.2013, 20:12
  • 2
    cat "$1" не была бы проблема если $1 были пусты. Лучше, cat < "$1" избегать проблем если $1 - или опция. –  Stéphane Chazelas 21.12.2013, 01:01

Теги

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