O problema com o script é que, se você chamar de qualquer forma (com e sem &
, ele verá apenas um parâmetro. bash
já usou o &
para colocar o processo em segundo plano. Se você tentaria o fg
depois de começar com emacs foo &
você deve ver o emacs sem janela, como na primeira opção.
A segunda opção nunca é executada e não deve ter um &
. O que é necessário é que o script teste se ele é executado em segundo plano e decide sobre isso. Em um programa C
ou em Python, eu testaria se o grupo de programas e o grupo de processos de terminal em primeiro plano são os mesmos, mas I não sabe como fazer isso no bash shell (Chris Down answer indica isso pode ser feito).
Sua invocação implica strongmente que você queira chamar este script de emacs
. Nesse caso, certifique-se de colocar o caminho completo para os emacs 'reais' lá, para evitar a recursão.
Se você pode viver com um script Python para fazer o trabalho:
import os
import sys
import subprocess
STDOUT_FILENO=1
emacs_cmd = ['/usr/bin/emacs']
if os.getpgrp() == os.tcgetpgrp(STDOUT_FILENO):
emacs_cmd.append('-nw')
emacs_cmd.extend(sys.argv[1:])
subprocess.call(emacs_cmd)
Ele permite que você especifique vários nomes de arquivos (e opções adicionais do emacs) na linha de comando.