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

Я пытаюсь написать простой сценарий оболочки для запуска команд с 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 отлично работает.

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

какова ваша цель? эхо исполняется ( /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