Відповідь ændrük чудова, але, можливо, трохи важка для виконання завдання.
Ось сценарій, який пише сценарій на основі своїх аргументів
#!/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-термінал почав запускати міні-скрипт, а потім запустити інтерактивну оболонку. Коли гном-термінал виходить, тимчасовий сценарій видаляється, оскільки засмічення не охолоджене.
Останній рядок не є частиною міні-скрипту, він демонструє, що міні-скрипт працює. Якщо сценарій 11 рядків вище знаходиться у файлі, який називається, rt.sh
то chmod
робить його виконуваним і тоді він виконується.
$ chmod +x rt.sh && ./rt.sh echo hello world
Результатом усього цього стане термінал гнома, який запускається, відображається
hello world
на першому рядку, а потім починає інтерактивну оболонку:
msw@myhost:~$