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
, затем вставляете, и все готово. Однако при вставке не будет вывода на экран - терминал просто зависнет, а затем вы введете хотя бы один байт в течение децисекунды, и приглашение снова появится. После этого вы можете работать с аргументами, как и раньше.