Ответ Ундрюка хорош, но, возможно, немного тяжел для этой задачи.
Вот скрипт, который пишет скрипт на основе своих аргументов
#!/bin/sh
# terminal-plus-command: start a subordinate terminal which runs
# the interactive shell after first running the command arguments
tmpscript=/tmp/tmpscript.$$
echo "#!$SHELL" > $tmpscript
echo "$@" >> $tmpscript
echo exec "$SHELL" >> $tmpscript
chmod +x $tmpscript
gnome-terminal --command $tmpscript
rm -f $tmpscript
Если вы не занимались программированием оболочки, здесь, похоже, больше магии, чем есть. Сначала я называю временный файл для хранения скрипта, где $$
находится идентификатор процесса оболочки, выполняющей этот скрипт. /tmp/something.$$
Метафора используется в случае , если два экземпляра этого скрипта запускается в то же время, они не будут пытаться использовать один и тот же временный файл.
Переменная $SHELL
установлена на имя оболочки, в которой выполняется скрипт. Если вы используете / usr / bin / bash, возможно, вы захотите использовать его и в мини-скрипте.
Это "$@"
оболочка для «интерполировать все мои аргументы, цитируя их при необходимости». Этот специфический синтаксис вызывает
script.sh 'my file' your\ file
интерполировать аргументы как два элемента
"my file" "your file"
вместо четырех, $@
которые дали бы
"my" "file" "your" "file"
В последних строках скрипта говорится, что gnome-терминал должен запустить мини-скрипт и запустить интерактивную оболочку. Когда gnome-терминал завершает работу, временный сценарий удаляется, потому что мусор не охлаждается.
Последняя строка не является частью мини-скрипта, она показывает, что мини-скрипт работает. Если приведенный выше 11-строчный скрипт находится в файле с именем, rt.sh
то chmod
он делает его исполняемым, а затем выполняется.
$ chmod +x rt.sh && ./rt.sh echo hello world
Результатом всего этого будет терминал гнома, который запускается, отображает
hello world
в первой строке, а затем запускает интерактивную оболочку:
msw@myhost:~$