Понимание встроенного чтения

Я пытаюсь написать простой сценарий оболочки для запуска команд с urxvt. Идея такова (не полный сценарий, просто идея):

PRMPT="read -r CMD" urxvt -g 55x6-20+20 -e $PRMPT CMD 

С этим скриптом есть две проблемы. Первый заключается в том, что read не подходит для такого рода задач, поскольку оно игнорирует параметры команды (если я пишу echo hello read, присваивается echo CMD и игнорирует hello ). Второй, который больше всего меня озадачивает, заключается в том, что urxvt -e немедленно выходит и не ждет моего ввода. Я полагаю, что это связано с тем, что read является встроенной функцией, но, например, urxvt -e echo hello отлично работает.

Есть ли у кого-нибудь предложения по изменению сценария?

2 Solutions collect form web for “Понимание встроенного чтения”

какова ваша цель? эхо исполняется ( /bin/echo ), чтение встроено. -e означает выполнение исполняемого файла. Если вы хотите использовать встроенную функцию вашей оболочки (bash?), Используйте urxvt -e /bin/bash -c read -r CMD

Я не знаю urxvt , но могу помочь вам read .

Когда вы read так:

 read -r CMD 

Он назначает первый токен, который он читает переменной CMD . Если вы хотите прочитать больше токенов, вы можете указать более переменные явно.

 read -r CMD ARGS1 ARG2 ARG3 

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

Вы также можете использовать массив, добавив параметр -a .

 read -ra CMD 

Чтобы расширить массив, выполните следующие действия:

 "${CMD[@]}" 

Иллюстрация.

 $ read -a cmd echo ok $ ${cmd[@]} ok 
  • Как добавить / удалить элемент в / из массива в bash?
  • Как выполнить как зарегистрированный пользователь в скрипте sudo (OSX)?
  • Лучше ли использовать $ (pwd) или $ PWD?
  • Сортировка файлов по наивысшему числу в имени файла
  • Запуск сценария на Debian 8 (Jessie) с помощью etherwake не будет работать
  • Как я могу искать имена файлов, которые начинаются с xy_ *, и создаются / редактируются сегодня?
  • Переместите все подкаталоги и сделайте что-нибудь в сценарии оболочки Unix.
  • Флокирование filedescriptor в сценарии оболочки
  • Прочитайте все в буфере трубы, не дожидаясь
  • Извлечение каталога из stdout из wget
  • Сравнение столбцов в двух файлах и добавление первого файла
  • Linux и Unix - лучшая ОС в мире.