Открытие терминала для текущего скрипта bash, если он не был запущен в одном
Как я могу заставить скрипт перезапустить себя в окне терминала, если он не был запущен в одном?
Основываясь на этом вопросе, я попытался, в файле под названием testterm
помеченный исполняемый файл:
#! /bin/sh
if [ -t 0 ]; # stdin
then
echo "yay! terminal!"
else
Terminal sh ~/Desktop/testterm
fi
... но хайку Terminal
просто открывается и никогда ничего не показывает, или иногда открывается и уходит немедленно.
Из терминала, если я наберу Terminal sh ~/Desktop/testterm
это работает один раз, открывая Терминал с "yay! в нем, но затем последующие попытки приводят к пустым терминалам.
1 ответ
A hack you could try is the following:
Create a special
bash
.rc file that sources yourbashrc
and runs your script. Давайте назовем это~/foo.rc
$ cat ~/foo.rc #!/bin/sh ~/Desktop/testterm
Create a new "shell" that calls
bash
с~/foo.rc
as its.rc file. Сохранить этот скрипт какfake_shell
где-то в вашем$PATH
(например,~/config/bin
) and make it executable:- Now, in your
testterm
script, launchTerminal
с помощьюfake_shell
as the shell.
The script becomes:
#!/bin/sh
if [ ! -t 0 ]; # stdin
then
TIMESTAMP=`date +%Y%m%d%H%M`
echo "#!/bin/sh
source /boot/common/etc/profile
$0" > ~/temp_term$TIMESTAMP.rc
echo "#!/bin/sh
bash --rcfile ~/temp_term$TIMESTAMP.rc" > ~/config/bin/temp_shell$TIMESTAMP
chmod a+x ~/config/bin/temp_shell$TIMESTAMP
Terminal temp_shell$TIMESTAMP
rm -f ~/config/bin/temp_shell$TIMESTAMP
rm -f ~/temp_term$TIMESTAMP.rc
fi
echo "yay! terminal!"
# your script here
exit