Вместо того, чтобы перефразировать мой вопрос, позвольте мне описать вам желаемый пользовательский случай:
Я создаю короткий shell-скрипт для запуска команды "gnome-терминал --someoptionflagname" мой текст для публикации "и запускаю этот скрипт.
Появляется Gnome-терминал с подсказкой командной строки, за которой следует мой текст.
то есть: fields@mycomputer:/$ my text to be posted
Можно ли это сделать?
xnee
теперь.Ответы:
Вы можете сделать это с помощью ожидаемого ( установить ). Создайте и сделайте исполняемый файл
~/bin/myprompt
:и запустить терминал Gnome с:
источник
Если я правильно понимаю, вы хотите, чтобы ваша первая строка ввода была предварительно заполнена содержимым, которое вы передаете в командной строке gnome-terminal.
Я не знаю, как именно это сделать с Bash, но вот что-то, что близко. В ваших
~/.bashrc
, добавьте следующую строку в самом конце:Запустите
gnome-terminal -x env BASH_INITIAL_COMMAND='my text to be posted' bash
и нажмите Upна приглашение, чтобы вспомнить текст.Также обратите внимание, что если вы добавите
set -o history
комментарии в конце вашего комментария.bashrc
, они будут внесены в историю при запуске bash, так что вы можете использовать их в качестве основы для редактирования, связавшись с ними Upключом и удалив начальный#
.источник
Предложение Эндрюка очень хорошее и сработало для меня, однако команда жестко запрограммирована в скрипте, и если вы измените размер окна терминала, он не будет работать хорошо. Используя его код в качестве основы, я добавил возможность посылать сценарию myprompt команду в качестве аргумента, и этот скрипт правильно обрабатывает изменение размера окна терминала.
и запустить терминал Gnome с:
источник
Ответ Ундрюка хорош, но, возможно, немного тяжел для этой задачи.
Вот скрипт, который пишет скрипт на основе своих аргументов
Если вы не занимались программированием оболочки, здесь, похоже, больше магии, чем есть. Сначала я называю временный файл для хранения скрипта, где
$$
находится идентификатор процесса оболочки, выполняющей этот скрипт./tmp/something.$$
Метафора используется в случае , если два экземпляра этого скрипта запускается в то же время, они не будут пытаться использовать один и тот же временный файл.Переменная
$SHELL
установлена на имя оболочки, в которой выполняется скрипт. Если вы используете / usr / bin / bash, возможно, вы захотите использовать его и в мини-скрипте.Это
"$@"
оболочка для «интерполировать все мои аргументы, цитируя их при необходимости». Этот специфический синтаксис вызываетинтерполировать аргументы как два элемента
вместо четырех,
$@
которые дали быВ последних строках скрипта говорится, что gnome-терминал должен запустить мини-скрипт и запустить интерактивную оболочку. Когда gnome-терминал завершает работу, временный сценарий удаляется, потому что мусор не охлаждается.
Последняя строка не является частью мини-скрипта, она показывает, что мини-скрипт работает. Если приведенный выше 11-строчный скрипт находится в файле с именем,
rt.sh
тоchmod
он делает его исполняемым, а затем выполняется.Результатом всего этого будет терминал гнома, который запускается, отображает
в первой строке, а затем запускает интерактивную оболочку:
источник
gnome-terminal -x sh -c "echo hello world; bash"
, что я не думаю, что вопрос задает.Два ответа, которые мне больше всего понравились для решения этой проблемы, это использование,
expect
и этот, где они рекомендуют использовать--init-file
флаг либо в shebang, либо при выполнении терминала:... и выполнить его как:
expect
Возможно, это лучшее решение (по причинам, которые я обрисую), за исключением того, что я не могу контролировать, установлено ли оно в моей целевой среде.Проблемы я столкнулся с Баш - х
--init-file
иgnome-terminal
«S ,--command
как взломать , чтобы решить это оболочка не имеет доступ к STDIN при выполнении скриптов инициализации. Если, например, я хочу запустить что-то, что потребует ввода данных пользователем (ftp, telnet и т. Д.), Но потом оставить родительскую оболочку включенной, это не сработает; единственное исключение, которое я видел до сих пор, это ssh:... но то, что мне нужно, сложнее, чем этот игрушечный пример. В любом случае, я надеюсь, что
--init-file
материал будет полезен всем, кто читает этот вопрос.источник
Вы можете использовать аргументы
-e
или-x
для запуска команды внутри недавно запущенного терминала, но это не совсем то, что вам нужно.источник