'\n' после `read -s`

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

'\n' после `read -s`

Сообщение serzh-z »

Есть ли какой-то штатный и красивый способ сделать так, чтобы после `read -s` выводился NL? Кроме как самостоятельно печатать '\n' после `read`?

Хотелось бы, чтобы 'bar' было на другой строке:

Shell

$ read -p 'foo: ' -s; echo 'bar'
foo: bar
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: '\n' после `read -s`

Сообщение Bizdelnick »

read -p 'foo: ' -s; echo -e '\nbar'
Да, я не дочитал первый абзац до конца.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: '\n' после `read -s`

Сообщение Hephaestus »

serzh-z писал:
27.09.2018 14:20
Хотелось бы, чтобы 'bar' было на другой строке:
Убрать -s ?
Насколько я понял, -s подавляет echo.
А echo по дефолту (без опции -n) делает перевод на другую строку.
Вывод: чтобы добиться перевода на новую строку, надо не подавлять echo, то есть убрать опцию -s

Shell

read -p 'foo: '; echo 'bar'
foo:
bar
Это, конечно, при условии, что я всё верно понял.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: '\n' после `read -s`

Сообщение serzh-z »

Нет и нет.

echo - это для примера. Там что угодно может быть, я его не контроллирую.

`-s`, разумеется, там не просто так - мне нужно ввести пароль и подавить эхо ввода (при этом не хочется выносить read из условия if и не хочется добавлять печать NL в каждую ветку if/else).

Может какая-нибудь переключалка в терминале есть, типа "печатать NL после закрытия stdin или после сброса режима подавленного эха"?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: '\n' после `read -s`

Сообщение Bizdelnick »

serzh-z писал:
27.09.2018 17:44
echo - это для примера. Там что угодно может быть, я его не контроллирую.
То есть тебе нужно повлиять на поведение кем-то написанного скрипта, не трогая его, я правильно понял?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: '\n' после `read -s`

Сообщение serzh-z »

Bizdelnick

Shell

if read -p 'Password: ' -s; then
# blah
fi
# blah
И внутри if и вне него любое приложении может что-то вывести.

Меня интересует, не умеет ли read самостоятельно печатать NL после своей работы в тихом режиме.

Мне не хочется вставлять печать NL перед blah и вообще добавлять лишние строки.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: '\n' после `read -s`

Сообщение Bizdelnick »

serzh-z писал:
27.09.2018 18:35
Меня интересует, не умеет ли read самостоятельно печатать NL после своей работы в тихом режиме.
Насколько мне известно, и насколько я понимаю из man bash-builtins (а другие реализации read и опции -s и -p понимать не обязаны), нет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: '\n' после `read -s`

Сообщение Hephaestus »

serzh-z писал:
27.09.2018 18:35
Мне не хочется вставлять печать NL перед blah и вообще добавлять лишние строки.
Ещё нагуглился вариант добавить перевод строки прямо в приглашение.
Выглядит примерно так:

Shell

read -p "Password: `echo $'\n '`" -s; echo bar
Password:
bar
Идея взята здесь.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: '\n' после `read -s`

Сообщение Bizdelnick »

Вообще несколько надуманная проблема — почему не вставить ещё echo? Хочешь красивее — напиши функцию:

Код: Выделить всё

readpassword() {
  old_stty_=$( stty -g )
  stty -echo
  printf "password: "
  read "$@"
  printf '\n'
  stty $old_stty_
}
Ещё и переносимо будет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: '\n' после `read -s`

Сообщение serzh-z »

Bizdelnick писал:
27.09.2018 23:35
почему не вставить ещё echo?
По задумке - это читабельный "однострочник" с минимумом переносов.

P.S.: насчёт собственного read выше - для полного соответствия встроенной версии нужно еще отключать echok и echonl.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: '\n' после `read -s`

Сообщение Bizdelnick »

serzh-z писал:
28.09.2018 08:07
для полного соответствия встроенной версии нужно еще отключать echok и echonl.
А может достаточно просто не отключать echonl? Я не проверял, честно говоря, как оно себя ведёт.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: '\n' после `read -s`

Сообщение serzh-z »

Bizdelnick
Нет, уже попробовал.

Фиг с ним, все равно пришлось превратить в полноценный скрипт, куда не страшно воткнуть печать NL.
Спасибо сказали:
Ответить