Ошибка с setcap cap_sys_time + ep / user / mybinaryprogram

set --
while IFS= read -r in
do    set -- "$@" "$in"
done

... затем нажмите клавиши shift-insert , затем ctrl + D один раз ( или дважды) , и каждая строка вашей пасты впоследствии может быть буквально (без NUL) в $ 1 и $ 2 и $ 3 и так далее, и весь входной массив может быть адресован как одна строка, объединенная с первым символом $ IFS в «$ *» или как список отдельных строки в «$ @» , что означает, что вы можете делать:

md5sum -- "$@"

... поскольку вы, очевидно, ищете полезное интерактивное сокращение:

alias rdcb='
    [ -t 0 ] && set -- &&
    while IFS= read -r in
    do    set -- "$@" "$in"
    done'

... определит псевдоним ] вы можете запустить в интерактивной оболочке, чтобы установить параметры оболочки в виде массива с разделителями новой строки из стандартного ввода.

так что ...

{   ls -1 | xsel -bi                 #pipes ls output into my clipboard
    rdcb                             #terminal hangs, shift+insert && crtl+d
    xsel -bo                         #writes my clipboard to stdout
    printf %s\\n '' --- '' "$@"      #writes \n-delimited shell arg array
    printf %s\\n '' --- '' "$3" "$5" #writes only args "$3" and "$5"
}

1
edit.sh
paccache
sh
systemd-private-75115542eb544b09bc245e8ca7765854-systemd-timesyncd.service-CKruFk
sztally
yaourt-tmp-mikeserv

---

1
edit.sh
paccache
sh
systemd-private-75115542eb544b09bc245e8ca7765854-systemd-timesyncd.service-CKruFk
sztally
yaourt-tmp-mikeserv

---

paccache
systemd-private-75115542eb544b09bc245e8ca7765854-systemd-timesyncd.service-CKruFk

Вот лучшая версия:

alias rdcb='
    if    [ -t 0 ]
    then  set -f -- "$IFS" "${IFS+IFS=\$1;} set +f -$-
          stty $(stty -g; stty raw -echo min 1 time 2)"
          IFS=$(printf \\r)
          set -- "$@" $(dd bs=4k count=1 2>/dev/null)
          eval "unset IFS;$2;shift 2"
    fi '

Она отбрасывает оконечное эхо и обработку специальных символов терминала и не требует CTRL + D , чтобы сигнализировать об окончании ввода. Все, что он делает, является временным, и он осторожно восстанавливает все настройки, которые он затрагивает, до состояния, в котором он их нашел, когда он был выполнен, за исключением аргументов оболочки, которые, конечно, постоянно изменяются по дизайну.

Итак, вы просто выполняете rdcb , затем вставляете, и все готово. Однако при вставке не будет вывода на экран - терминал просто зависнет, а затем вы введете хотя бы один байт в течение децисекунды, и приглашение снова появится. После этого вы можете работать с аргументами, как и раньше.

0
12.11.2018, 09:34
0 ответов

Теги

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