Intereting Posts
Плохое разрешение – Отсутствует, поврежден после приостановки, x121e Mint 11 – Bad EDID? Не удалось подключиться к моему серверу Ubuntu SSH даже после перенаправления портов на маршрутизаторе Как обеспечить правильные разрешения для файлов при запуске установщика bash как sudo? Компиляция и сборка с использованием make Драйвер беспроводной сети ndiswrapper не подключается к обнаруженной сети Wi-Fi gtga для cygwin Открытие устройства TUN из QEmu x86 для ARMv7 не выполняется Поиск исходного файла символической ссылки MTU продолжает сбрасываться до 1500 Улучшение шрифтов Fedora 17 Как создать окно терминала с одной вкладкой на длинный сценарий, который я могу убить индивидуально с помощью ctrl-C и перезапустить? Постоянное переключение на zsh в скрипте, без root и без запроса пароля Как вставить текст перед первой строкой файла? zfs-fuse: включение сжатия не влияет Как проверить, поврежден ли файл или нет?

Поместить текст в буфер командной строки bash

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

То, что я с нетерпением жду, похоже на read -i но для команд.

-i text Если для чтения строки используется readline, текст помещается в буфер редактирования до начала редактирования.

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

Если это для функции, которую вы собираетесь использовать в привязке readline с bind -x вы можете изменить READLINE_LINE . ( Пример )

Вне привязки readline вы можете нажать фальшивую команду на историю с history -s .

Я нашел хакерский способ сделать это на странице примеров fzf . Это работает с bash 4.3 и perl 5.18:

 writecmd () { perl -e 'ioctl STDOUT, 0x5412, $_ for split //, do{ chomp($_ = <>); $_ }' ; } # Example usage echo 'my test cmd' | writecmd 

Он выводит команду на stdout, но также копирует ее в буфер команд. Также есть пример на связанной странице, если вы хотите выполнить команду напрямую.

Ответ Жиля правильный, но не полностью удовлетворительный. Когда я прочитал этот вопрос, OP хочет «запрограммировать» следующую строку ввода. В моем случае я хотел прочитать текущую позицию терминала в моей функции PROMPT_COMMAND. Это работает, но использует тот же буфер чтения, что и первичная оболочка, и поэтому любой пользовательский ввод отбрасывается из-за того, что я сделал встроенный вызов «read» в функции. Поэтому я хотел прочитать отдельный вход пользователя, прочитать мой терминал и затем поместить считываемый ввод обратно во входной буфер, что является исходным вопросом. Обратите внимание, что это действительно в рамках одного и того же процесса, поэтому теоретически это должно быть возможно.

Насколько я могу видеть (в моем bash 4.2) нет никакой функции, чтобы программно вытолкнуть что-то в входной стек. В zsh используется 'print -z'.

Итак, ответ: это невозможно в bash, для этого вам нужно использовать zsh.

В качестве альтернативы history -s 'foo' попробуйте:

 echo 'foo' >> ~/.bash_history history -n # or history -s 'foo' history -a history -n