Я новичок в сценариях оболочки. Я пишу сценарий запуска, который принимает аргумент и запускает процесс на основе значения аргумента.
Пример: я хочу запустить мою groovyConsole, расположенную внутри некоторого каталога, используя скрипт запуска, как это.
sh Starter.sh groovy
Внутри скрипта это логика
if [ $1 = "groovy" ]
then
cd Works/Groovy/groovy-1.8.6/bin
./groovyConsole
fi
Это действительно запускает процесс, но я вижу, что этот процесс связан с окном терминала. Если я закрою окно терминала, процесс будет убит (очевидно). Поэтому я хочу знать, есть ли способ, при котором приведенная выше команда выполнит сценарий и запустит процесс, но закроет окно терминала?
Можно отсоединить его от текущего процесса с nohup
, и &
if [ $1 = "groovy" ] then cd Works/Groovy/groovy-1.8.6/bin nohup ./groovyConsole & fi
Это оставило бы команду groovyConsole работающий, пока Вы не уничтожаете его. Это не закрывает окно терминала, хотя покупают Вас, делают это как это...
sh Starter.sh groovy && exit
Я не эксперт, как когда-либо это должно работать.
if [ $1 = "groovy" ]
then
Works/Groovy/groovy-1.8.6/bin/groovyConsole &
exit
fi
Объяснение:
&
запускают приложения в фоне попробуйте изменение./groovyConsole к./groovyConsole & и добавьте выход после строки
Для сценария оболочки для закрытия его родительского процесса это должно уничтожить его явно. Это также очень плохая практика, чтобы сделать это (потому что в будущем Вы могли бы выполнять этот сценарий в среде кроме того, что Вы ожидаете), но если Вы действительно хотите, можно попробовать:
#!/bin/sh
if [ $1 = "groovy" ]
then
cd Works/Groovy/groovy-1.8.6/bin
nohup ./groovyConsole &
kill $PPID
fi