Открытие терминала для текущего скрипта 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 yourbashrcand runs your script. Давайте назовем это~/foo.rc$ cat ~/foo.rc #!/bin/sh ~/Desktop/testtermCreate a new "shell" that calls
bashс~/foo.rcas its.rc file. Сохранить этот скрипт какfake_shellгде-то в вашем$PATH(например,~/config/bin) and make it executable:- Now, in your
testtermscript, launchTerminalс помощьюfake_shellas 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