-1

Прежде всего, спасибо за вашу помощь заранее и извините за ответ на этот вопрос ранее. Я не смог найти его.

Чтобы помочь понять мой вопрос, я написал следующий простой скрипт под названием "list_server_owners" (он бесполезен, но это всего лишь пример):

#!/bin/bash

SERVER_LIST=""
SERVER_LIST="$(cat) " # This reads from stdin

for SERVER in $SERVER_LIST
    do
    echo -n "Please, write the server's owner: "
    read OWNER
    echo "${SERVER}'s owner is $OWNER"
    done

У меня есть следующий текстовый файл с именем "server_list":

Server1
Server2

И это вывод скрипта, передающего "server_list" через stdin:

$ cat server_list | list_server_owner
Please, write the server's owner: Server1's owner is
Please, write the server's owner: Server2's owner is

Проблему легко описать: строка скрипта "ЧИТАЙТЕ ВЛАДЕЛЬЦА" работает не так, как хотелось бы. Имя владельца сервера не запрашивается на экране.

Знаете ли вы, как я могу заставить команду "читать" запросить строку на экране?

3 ответа3

0

Файл /dev /tty является синонимом управляющего терминала процесса, поэтому просто перенаправьте ввод с этого устройства:

...
read OWNER </dev/tty
...

Вы также можете перенаправить вывод приглашения echo до /dev /tty, а затем использовать скрипт в конвейере:

#!/bin/bash

while read SERVER  # this reads from stdin
do
  echo -n "Please, write the server's owner: " >/dev/tty
  read OWNER </dev/tty
  echo "$SERVER:$OWNER"    # write to stdout
done

И используйте как:

 cat server_list | assign_owner > server_owner
0

Я нашел решение.

Вы должны добавить сделать это:

MY_TTY=$(ps -ef | grep -m 1 $$ | awk '{print $6}')
read OWNER </dev/${MY_TTY}
0

Еще одна возможность, и она для меня самая простая:

exec 0</dev/tty
read OWNER

При этом вам не нужно указывать стандартный ввод для всех команд "чтения" вдоль скрипта.

Я был сбит с толку, потому что, если вы напишите команду "tty" внутри скрипта, вы не получите вывод, но, как говорится в последнем комментарии (спасибо), специальный файл /dev /tty распознается.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .