Mac OS X Inicialização do terminal sem janela

2

Estou curioso para saber se alguém encontrou uma boa maneira de ter o aplicativo Terminal em um Mac aberto sem abrir uma janela. A preferência de inicialização tem as opções "Nova janela com configurações:" ou abre um grupo de janelas específico, mas eu prefiro que apenas abra nada para começar. Eu tentei salvar um grupo de janelas sem janelas, mas ele volta a abrir uma janela padrão novamente.

    
por Thursdays Coming 28.01.2013 / 01:30

1 resposta

2

Não encontrei nenhuma opção para impedir a abertura de uma janela quando o Terminal é iniciado, mas você pode verificar se a sessão bash atual foi iniciada exatamente ao mesmo tempo em que o Terminal foi iniciado. Se esse for o caso, a sessão bash deve sair.

Você verá uma janela aparecendo e desaparecendo por uma fração de segundo.

Adicione o seguinte código (testado no Mac OS X 10.5.8 (Leopard) [ veja minha nota abaixo ] e no OS X 10.8.2 (Mountain Lion)) no início de seu ~/.bash_profile :

shell_started=$(ps -A -o lstart $$ | grep -v STARTED)
terminal_started=$(ps -A -o lstart $(ps -A -o pid -o command | grep '/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn' | grep -v grep | cut -d '/' -f 1) | grep -v STARTED)
if [ "X$shell_started" == "X$terminal_started" ]; then exit; fi

Explicação do código:

shell_started=$(ps -A -o lstart $$ | grep -v STARTED) : execute ps to print when process identifed by variable $$ started ($$ expands to the PID ot this bash session). Then filter out the header (which contains the word STARTED). Assign resulting value to variable shell_started.

ps -A -o pid -o command | grep '/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn' | grep -v grep | cut -d '/' -f 1 : execute ps to print all process command names, select the one that matches the full path to Terminal, filter out any spurious grep processes and extract process ID with cut.

terminal_started=$(ps -A -o lstart $(...) | grep -v STARTED) : execute ps to print when process Terminal started, and filter out the header (which contains the word STARTED).

(I had to create terminal_started in two steps to get rid of TABs ps added to the output.)

if [ "X$shell_started" == "X$terminal_started" ]; then exit; fi : Compare both dates and if equal, exit the shell, that is, close the Terminal window.

Se não estiver funcionando para você (como foi o caso do OP, que usa o Mac OS X 10.6.8 (Snow Leopard)), tente:

shell_started=$(ps -A -o lstart $$ | grep -v STARTED)
terminal_started=$(ps -A -o lstart $(ps -A -o pid -o command | grep '/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn' | grep -v grep | tail -n 1| cut -d '/' -f 1) | grep -v STARTED)
if [ "X$shell_started" == "X$terminal_started" ]; then exit; fi

(A única diferença aqui é um tail in terminal_started que seleciona a última entrada impressa por ps , caso haja mais de um.)

Nota para o Mac OS X 10.5.8 (Leopard) : No meu antigo PowerBook G4, notei que às vezes havia uma diferença de um segundo entre os horários de início do Terminal e a atual bash de sessão. Se você estiver com problemas semelhantes em um computador lento, adicione essas três linhas de linha ao final do código acima:

one_second_before=$(expr "$shell_started" : '.*:\([0-9][0-9]\) .*' - 1)
shell_started_one_second_before=$(echo $shell_started | sed 's/\(.*:\)\([0-9][0-9]\)\( .*\)/'$one_second_before'/')
if [ "X$shell_started_one_second_before" == "X$terminal_started" ]; then exit; fi

Existe uma condição de contorno em que este código não funciona bem, ou seja, quando o shell foi iniciado no segundo 0, mas eu não queria adicionar mais complexidade.

    
por 28.01.2013 / 12:17