Вывести сообщение на экран linux

Обновлено: 05.07.2024

Команда echo — одна из самых основных и часто используемых команд в Linux. Аргументы, переданные в echo выводятся на стандартный вывод.

эхо-команда

echo — это оболочка, встроенная в Bash и большинство других популярных оболочек, таких как Zsh и Ksh. Его поведение немного отличается от оболочки к оболочке.

Существует также отдельная утилита /usr/bin/echo , но обычно встроенная версия оболочки имеет приоритет. Мы рассмотрим встроенную в Bash версию echo .

Синтаксис команды echo следующий:

  • Когда используется опция -n , завершающий символ новой строки подавляется.
  • Если задана опция -e будут интерпретироваться следующие символы, экранированные обратной косой чертой:
    • \ — отображает обратную косую черту.
    • a — Предупреждение (BEL)
    • b — отображает символ возврата.
    • c — подавить любой дальнейший вывод
    • e — отображает escape-символ.
    • f — отображает символ перевода страницы.
    • n — отображает новую строку.
    • r — отображает возврат каретки.
    • t — отображает горизонтальную вкладку.
    • v — отображает вертикальную вкладку.

    При использовании команды echo следует учитывать несколько моментов.

    • Оболочка заменит все переменные, сопоставление подстановочных знаков и специальные символы перед передачей аргументов команде echo .
    • Хотя это и не обязательно, рекомендуется заключать аргументы, передаваемые в echo в двойные или одинарные кавычки.
    • При использовании одинарных кавычек '' буквальное значение каждого символа, заключенного в кавычки, будет сохранено. Переменные и команды расширяться не будут.

    echo Примеры

    В следующих примерах показано, как использовать команду echo:

    Вывести строку текста на стандартный вывод.

    Отобразите строку текста, содержащую двойные кавычки.

    Чтобы напечатать двойную кавычку, заключите ее в одинарные кавычки или экранируйте символ обратной косой черты.

    Отобразите строку текста, содержащую одинарную кавычку.

    Чтобы напечатать одинарную кавычку, заключите ее в двойные кавычки или используйте кавычки ANSI-C .

    Используйте параметр -e чтобы включить интерпретацию escape-символов.

    Символы соответствия шаблону.

    Команда echo может использоваться с символами сопоставления с образцом, такими как подстановочные знаки. Например, приведенная ниже команда вернет имена всех файлов .php в текущем каталоге.

    Если файл file.txt не существует, команда создаст его. При использовании > файл будет перезаписан, а символ >> добавит вывод в файл .

    Используйте команду cat для просмотра содержимого файла:

    Отображение переменных

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

    $USER — это переменная оболочки, в которой хранится ваше имя пользователя.

    Отображение вывода команды

    Используйте выражение $(command) чтобы включить вывод команды в аргумент echo . Следующая команда отобразит текущую дату :

    Отображение в цвете

    Используйте escape-последовательности ANSI, чтобы изменить цвета переднего плана и фона или установить свойства текста, такие как подчеркивание и полужирный шрифт.

    Выводы

    К настоящему времени вы должны хорошо понимать, как работает команда echo .

    Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

    В прошлый раз, в третьей части этой серии материалов по bash-скриптам, мы говорили о параметрах командной строки и ключах. Наша сегодняшняя тема — ввод, вывод, и всё, что с этим связано.

    image



    Вы уже знакомы с двумя методами работы с тем, что выводят сценарии командной строки:

    • Отображение выводимых данных на экране.
    • Перенаправление вывода в файл.

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

    Всё в Linux — это файлы, в том числе — ввод и вывод. Операционная система идентифицирует файлы с использованием дескрипторов.

    Каждому процессу позволено иметь до девяти открытых дескрипторов файлов. Оболочка bash резервирует первые три дескриптора с идентификаторами 0, 1 и 2. Вот что они означают.

    • 0 , STDIN — стандартный поток ввода.
    • 1 , STDOUT — стандартный поток вывода.
    • 2 , STDERR — стандартный поток ошибок.

    STDIN

    STDIN — это стандартный поток ввода оболочки. Для терминала стандартный ввод — это клавиатура. Когда в сценариях используют символ перенаправления ввода — , Linux заменяет дескриптор файла стандартного ввода на тот, который указан в команде. Система читает файл и обрабатывает данные так, будто они введены с клавиатуры.

    Многие команды bash принимают ввод из STDIN , если в командной строке не указан файл, из которого надо брать данные. Например, это справедливо для команды cat .

    Когда вы вводите команду cat в командной строке, не задавая параметров, она принимает ввод из STDIN . После того, как вы вводите очередную строку, cat просто выводит её на экран.

    STDOUT

    Итак, у нас есть некий файл с данными, к которому мы можем добавить другие данные с помощью этой команды:


    То, что выведет pwd , будет добавлено к файлу myfile , при этом уже имеющиеся в нём данные никуда не денутся.

    Перенаправление вывода команды в файл

    Попытка обращения к несуществующему файлу

    STDERR

    ▍Перенаправление потока ошибок

    ▍Перенаправление потоков ошибок и вывода

    Перенаправление ошибок и стандартного вывода

    Перенаправление STDERR и STDOUT в один и тот же файл

    После выполнения команды то, что предназначено для STDERR и STDOUT , оказывается в файле content .

    Перенаправление вывода в скриптах

    Существует два метода перенаправления вывода в сценариях командной строки:

    • Временное перенаправление, или перенаправление вывода одной строки.
    • Постоянное перенаправление, или перенаправление всего вывода в скрипте либо в какой-то его части.

    ▍Временное перенаправление вывода


    Если запустить скрипт, обе строки попадут на экран, так как, как вы уже знаете, по умолчанию ошибки выводятся туда же, куда и обычные данные.

    Временное перенаправление

    Запустим скрипт так, чтобы вывод STDERR попадал в файл.

    ▍Постоянное перенаправление вывода

    Если в скрипте нужно перенаправлять много выводимых на экран данных, добавлять соответствующую команду к каждому вызову echo неудобно. Вместо этого можно задать перенаправление вывода в определённый дескриптор на время выполнения скрипта, воспользовавшись командой exec :

    Перенаправление всего вывода в файл

    Если просмотреть файл, указанный в команде перенаправления вывода, окажется, что всё, что выводилось командами echo , попало в этот файл.

    Команду exec можно использовать не только в начале скрипта, но и в других местах:


    Вот что получится после запуска скрипта и просмотра файлов, в которые мы перенаправляли вывод.

    Перенаправление вывода в разные файлы

    Сначала команда exec задаёт перенаправление вывода из STDERR в файл myerror . Затем вывод нескольких команд echo отправляется в STDOUT и выводится на экран. После этого команда exec задаёт отправку того, что попадает в STDOUT , в файл myfile , и, наконец, мы пользуемся командой перенаправления в STDERR в команде echo , что приводит к записи соответствующей строки в файл myerror.

    Освоив это, вы сможете перенаправлять вывод туда, куда нужно. Теперь поговорим о перенаправлении ввода.

    Перенаправление ввода в скриптах

    Для перенаправления ввода можно воспользоваться той же методикой, которую мы применяли для перенаправления вывода. Например, команда exec позволяет сделать источником данных для STDIN какой-нибудь файл:


    Эта команда указывает оболочке на то, что источником вводимых данных должен стать файл myfile , а не обычный STDIN . Посмотрим на перенаправление ввода в действии:


    Вот что появится на экране после запуска скрипта.

    Перенаправление ввода

    Некоторые администраторы Linux используют этот подход для чтения и последующей обработки лог-файлов.

    Создание собственного перенаправления вывода

    Перенаправляя ввод и вывод в сценариях, вы не ограничены тремя стандартными дескрипторами файлов. Как уже говорилось, можно иметь до девяти открытых дескрипторов. Остальные шесть, с номерами от 3 до 8, можно использовать для перенаправления ввода или вывода. Любой из них можно назначить файлу и использовать в коде скрипта.

    Назначить дескриптор для вывода данных можно, используя команду exec :


    После запуска скрипта часть вывода попадёт на экран, часть — в файл с дескриптором 3 .

    Перенаправление вывода, используя собственный дескриптор

    Создание дескрипторов файлов для ввода данных

    После окончания чтения файла можно восстановить STDIN и пользоваться им как обычно:

    Перенаправление ввода

    В этом примере дескриптор файла 6 использовался для хранения ссылки на STDIN . Затем было сделано перенаправление ввода, источником данных для STDIN стал файл. После этого входные данные для команды read поступали из перенаправленного STDIN , то есть из файла.

    После чтения файла мы возвращаем STDIN в исходное состояние, перенаправляя его в дескриптор 6 . Теперь, для того, чтобы проверить, что всё работает правильно, скрипт задаёт пользователю вопрос, ожидает ввода с клавиатуры и обрабатывает то, что введено.

    Закрытие дескрипторов файлов

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

    Всё дело в том, что мы попытались обратиться к несуществующему дескриптору.

    Будьте внимательны, закрывая дескрипторы файлов в сценариях. Если вы отправляли данные в файл, потом закрыли дескриптор, потом — открыли снова, оболочка заменит существующий файл новым. То есть всё то, что было записано в этот файл ранее, будет утеряно.

    Получение сведений об открытых дескрипторах

    Для того, чтобы получить список всех открытых в Linux дескрипторов, можно воспользоваться командой lsof . Во многих дистрибутивах, вроде Fedora, утилита lsof находится в /usr/sbin . Эта команда весьма полезна, так как она выводит сведения о каждом дескрипторе, открытом в системе. Сюда входит и то, что открыли процессы, выполняемые в фоне, и то, что открыто пользователями, вошедшими в систему.

    У этой команды есть множество ключей, рассмотрим самые важные.

    • -p Позволяет указать ID процесса.
    • -d Позволяет указать номер дескриптора, о котором надо получить сведения.

    Ключ -a используется для выполнения операции логического И над результатами, возвращёнными благодаря использованию двух других ключей:

    Вывод сведений об открытых дескрипторах

    Тип файлов, связанных с STDIN , STDOUT и STDERR — CHR (character mode, символьный режим). Так как все они указывают на терминал, имя файла соответствует имени устройства, назначенного терминалу. Все три стандартных файла доступны и для чтения, и для записи.

    Посмотрим на вызов команды lsof из скрипта, в котором открыты, в дополнение к стандартным, другие дескрипторы:


    Вот что получится, если этот скрипт запустить.

    Просмотр дескрипторов файлов, открытых скриптом

    Скрипт открыл два дескриптора для вывода ( 3 и 6 ) и один — для ввода ( 7 ). Тут же показаны и пути к файлам, использованных для настройки дескрипторов.

    Подавление вывода


    Тот же подход используется, если, например, надо очистить файл, не удаляя его:

    Итоги

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

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

    Я пишу несколько небольших сценариев bash под Ubuntu linux. Я хочу иметь возможность запускать их из GUI без необходимости окна терминала для ввода любого ввода или просмотра любого вывода.

    Я считаю Зениты будет делать то, что вы хотите. Он специально разработан для отображения диалоговых окон GTK из командной строки, и он доступен как пакета Ubuntu.

    Если вы используете Ubuntu многие дистрибутивы в notify-send команда бросит одно из этих приятных скоропортящихся уведомлений в правом верхнем углу. Вот так:

    notify-send "My name is bash and I rock da house"

    Б. Е. а.прекрасный!

    во-первых, пример zenity с разметкой форматирования текста, заголовком окна, меткой кнопки.

    gxmessage

    xmessage

    xmessage очень старый, поэтому он стабилен и, вероятно, доступен во всех дистрибутивах, использующих X (поскольку он распространяется с X). Это настраиваемый через ресурсы X, для тех, кто использует Linux или Unix достаточно долго, чтобы знать, что это значит ( .Xdefaults кому-нибудь ?).

    kdialog

    в ППА

    другим не в стандартных репозиториях Ubuntu

    • shellgui
    • xdialog
    • gtkdialog

    Off-topic (для терминала)

    не стесняйтесь редактировать.

    на Зениты приложение, похоже, то, что вы ищете.

    принимать входные данные от Зениты, вы можете указать переменную и иметь выход zenity --запись спас его. Это выглядит примерно так:

    если вы посмотрите на стоимость в my_variable теперь это будет то,что было набрано в диалоговом окне ввода zenity.

    если вы хотите дать какую-то подсказку, что пользователь (или Вы) должен войти в диалоговое окно, добавить --text переключатель с меткой, которую вы хотите. Это выглядит примерно так:

    Zenity имеет много других приятных опций, которые предназначены для конкретных задач, поэтому вы можете проверить их с помощью zenity -- помогите. Одним из примеров является --календарь опция, которая позволяет вам выбрать дату из графического календаря.

    что дает красиво отформатированную дату на основе что пользователь нажал на:


    Вы уже знакомы с двумя методами работы с тем, что выводят сценарии командной строки:

    • Отображение выводимых данных на экране.
    • Перенаправление вывода в файл.

    Иногда что-то надо показать на экране, а что-то — записать в файл, поэтому нужно разобраться с тем, как в Linux обрабатывается ввод и вывод, а значит — научиться отправлять результаты работы сценариев туда, куда нужно. Начнём с разговора о стандартных дескрипторах файлов.

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

    Всё в Linux — это файлы, в том числе — ввод и вывод. Операционная система идентифицирует файлы с использованием дескрипторов.

    Каждому процессу позволено иметь до девяти открытых дескрипторов файлов. Оболочка bash резервирует первые три дескриптора с идентификаторами 0, 1 и 2. Вот что они означают.

    • , STDIN — стандартный поток ввода.
    • 1 , STDOUT — стандартный поток вывода.
    • 2 , STDERR — стандартный поток ошибок.

    Эти три специальных дескриптора обрабатывают ввод и вывод данных в сценарии.
    Вам нужно как следует разобраться в стандартных потоках. Их можно сравнить с фундаментом, на котором строится взаимодействие скриптов с внешним миром. Рассмотрим подробности о них.

    STDIN

    STDIN — это стандартный поток ввода оболочки. Для терминала стандартный ввод — это клавиатура. Когда в сценариях используют символ перенаправления ввода — , Linux заменяет дескриптор файла стандартного ввода на тот, который указан в команде. Система читает файл и обрабатывает данные так, будто они введены с клавиатуры.

    Многие команды bash принимают ввод из STDIN , если в командной строке не указан файл, из которого надо брать данные. Например, это справедливо для команды cat .

    Когда вы вводите команду cat в командной строке, не задавая параметров, она принимает ввод из STDIN . После того, как вы вводите очередную строку, cat просто выводит её на экран.

    STDOUT

    Итак, у нас есть некий файл с данными, к которому мы можем добавить другие данные с помощью этой команды:

    Читайте также: