Удалите запаздывание новой строки из 'буфера обмена' для предотвращения выполнения на терминале?

Причиной этого является порядок, в котором вещи происходят в ударе. Расширение фигурной скобки происходит, прежде чем переменные расширены. Для выполнения цели необходимо использовать C-стиль для цикла:

upperlim=10

for ((i=0; i<=upperlim; i++)); do
   echo "$i"
done
9
16.10.2013, 22:28
4 ответа

Хорошая современная поддержка терминалов заключенная в скобки вставка: при использовании команды вставки терминала она отправляет специальные escape-последовательности вокруг содержания буфера обмена. Если Ваши поддержки оболочки заключили в скобки вставку, она вставит содержание буфера обмена включая любые управляющие символы как есть, и в особенности запаздывающая новая строка не инициирует выполнение команды.

Zsh ≥5.1 поддержек заключенная в скобки вставка и имеет его на по умолчанию. Более старые версии могут преподаваться. Bash ≥4.4 поддержки заключенная в скобки вставка, если Вы добавляете set enable-bracketed-paste on кому: ~/.inputrc.

Если Ваш терминал или оболочка не поддерживают заключенную в скобки вставку, Вы могли бы определить функцию оболочки, которая вставляет без запаздывающей новой строки.

В zsh следующая команда напоминает содержание буфера обмена, минус запаздывающие новые строки, и поднимает его для редактирования (даже если существует несколько строк):

print -z -- "`xsel -b`"

В ударе можно продвинуть содержание буфера обмена минус запаздывающие новые строки к стопке истории. После этого нажмите Up для перевода в рабочее состояние команды для редактирования.

history -s -- "`xsel -b`"
5
27.01.2020, 20:06

Да, используйте cat для вставки в файле сделайте то, что Вы любите и затем выполняете его.

Для этого случая:

$ cat > tmp
[paste][Ctrl+D]
$ tr -d '\n' <tmp | xclip # this remove all "new line" characters 
                          #  and copy back to clipboard
4
27.01.2020, 20:06
  • 1
    И как я мог использовать его на уровне GUI, когда я копирую некоторую команду с браузера (как ответ Стека) к моей оболочке... На самом деле я вчера разрушил свою ОС из-за такой вставки копии :) –  Tomasz Kapłoński 12.02.2018, 16:26

Это заставляет \ev вставить буфер обмена без новых строк в bash 4.0 и более поздние:

pasteline() {
  local input=$(xsel -b)
  input=${input//$'\n'}
  READLINE_LINE=${READLINE_LINE:0:$READLINE_POINT}$input${READLINE_LINE:$READLINE_POINT}
  READLINE_POINT=$((READLINE_POINT+${#input}))
}

bind -x '"\ev": pasteline'

Замените xsel -b на pbpaste и установите bash 4 в OS X.

.
2
27.01.2020, 20:06

Я понял, что мы можем сделать это в одну строку, вдохновленный ответом @RSFalcon7

с помощью xsel, чтобы скопировать в основной выбор

cat | tr -d '\n' | xsel

[paste], 2 times[Ctrl-D]
2
27.01.2020, 20:06

Теги

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