Подтвердить что ты не робот

Самый простой способ вывести символ новой строки из строки ввода в картон

Надеюсь, довольно просто, чтобы объяснить случай использования, когда я запускаю следующую команду (OS X 10.6):

$ pwd | pbcopy

монтажная доска содержит символ новой строки в конце. Я хотел бы избавиться от этого.

4b9b3361

Ответ 1

pwd | tr -d '\n' | pbcopy

Ответ 2

printf $(pwd) | pbcopy

или

echo -n $(pwd) | pbcopy

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

echo -n "$(pwd)" | pbcopy

Ответ 3

Я написал утилиту под названием noeol для решения этой проблемы. Он выводит stdin на stdout, но при его отсутствии оставляет конечную новую строку. Например.

pwd | noeol | pbcopy

... Я сгладил copy до noeol | pbcopy.

Посмотрите здесь: https://github.com/Sidnicious/noeol

Ответ 4

У меня были проблемы с tr -d '\n'. На OSX я установил пакет coreutils через brew install coreutils. Это обеспечивает все "нормальные" утилиты GNU с префиксом g перед их типичными именами. Так что head будет ghead например.

Используя это работало более безопасно IMO:

pwd | ghead -c -1 | pbcopy

Вы можете использовать od чтобы увидеть, что происходит с выводом:

$ pwd | ghead -c -1 | /usr/bin/od -h
0000000      552f    6573    7372    732f    696d    676e    6c6f    6c65
0000020      696c
0000022

против

$ pwd | /usr/bin/od -h
0000000      552f    6573    7372    732f    696d    676e    6c6f    6c65
0000020      696c    000a
0000023

Различия?

00 и 0a - это шестнадцатеричные коды для нуля и перевода строки. ghead -c -1 просто "выбивает" последний символ из вывода перед передачей его в | pbcopy | pbcopy.

$ man ascii | grep -E '\b00\b|\b0a\b'
     00 nul   01 soh   02 stx   03 etx   04 eot   05 enq   06 ack   07 bel
     08 bs    09 ht    0a nl    0b vt    0c np    0d cr    0e so    0f si