Открытие терминала для текущего скрипта 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:

  1. Create a special bash.rc file that sources your bashrc and runs your script. Давайте назовем это ~/foo.rc

    $ cat ~/foo.rc
    #!/bin/sh
    ~/Desktop/testterm
    
  2. Create a new "shell" that calls bash с ~/foo.rc as its.rc file. Сохранить этот скрипт как fake_shell где-то в вашем $PATH (например, ~/config/bin) and make it executable:

  3. Now, in your testterm script, launch Terminal с помощью 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
Другие вопросы по тегам