Как я получаю stdin к переменной, не разделяя запаздывающих новых строк?

Выполните xfce4-settings-manager, в Session and Startup -> Application autostart, добавьте запись, которая выполняется xmodmap ~/.xmodmap

Или переименуйте файл к ~/.Xmodmap

9
10.09.2014, 17:25
3 ответа

Стирание новых колей перед сохранением значения в переменной. Вы можете сделать что-нибудь вроде:

var=`cat; echo x`

и использовать ${var%x} вместо $var. Например:

printf "%s" "${var%x}"

Обратите внимание, что это решает проблему трейлинга новых строк, но не нулевого байта (если стандартный вход не является текстовым), так как в соответствии с заменой POSIX команды:

Если выход содержит какие-либо нулевые байты, поведение не определено.

Но реализации оболочки могут сохранять нулевые байты.

7
27.01.2020, 20:06

Вы можете использовать read встроенный для выполнения этого:

$ IFS='' read -d '' -r foo < <(echo bar)

$ echo "<$foo>"
<bar
>

Для скрипта для чтения STDIN, это было бы просто:

IFS='' read -d '' -r foo

Я не уверен, в каких оболочках это сработает. Но прекрасно работает и в bash, и в zsh.

4
27.01.2020, 20:06

Вы можете сделать так:

input | { var=$(sed '$s/$/./'); var=${var%.}; }

Что бы вы ни делали $var исчезает, как только вы выходите из этой {текущей оболочки ; } группировки в любом случае. Но это также может работать как:

var=$(input | sed '$s/$/./'); var=${var%.}
2
27.01.2020, 20:06

Теги

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