OSX: Restante no terminal depois que o programa C é executado

0

2ª edição

Alguns esclarecem ...

Eu escrevi um programa C que pede entrada (neste caso, usando fgets() ). Quando eu compilo em um executável C, percebo esse comportamento:

Se eu executar o executável a partir do terminal, como: ~$ ./program_name , obviamente, a sessão de terminal continua depois que o processo é concluído. Eu sou saudado com uma linha de comando em branco, como de costume: ~$

No entanto, se eu executar o executável clicando duas vezes no arquivo executável C, um terminal será aberto e eu poderei inserir os dados, conforme solicitado pelo programa. Depois que os dados são inseridos, o processo termina, o "terminal" diz [Process completed] e o terminal é aparentemente inutilizável.

Quando executo um executável C no OSX que permite entrada de terminal (via fgets() , por exemplo), depois que as informações são inseridas, a mensagem [Process completed] aparece e o terminal parece inutilizável. Isso é inconveniente para meus propósitos.

Perguntas: Vamos supor que estou executando sem um terminal aberto. Então eu estou clicando duas vezes no programa.

  • Existe uma maneira de permanecer no terminal depois de executar o programa C através de uma entrada de linha de comando ?

    • Meu programa pede entrada, então eu posso dar entrada que pode echo no shell ... existe alguma maneira / comando de permanecer no terminal? Gerar um novo terminal é uma opção, mas é distante menos desejável.
  • Existe uma maneira de permanecer no terminal alterando meu programa C?

Pergunta adicional: Existe um comando de terminal para gerar uma nova janela de terminal?

Todas as ideias são bem vindas ...! Eu tenho alguns, mas nada de satisfatório ainda.

    
por d0rmLife 24.01.2013 / 06:57

1 resposta

0

[Process completed] é o que o Terminal grava no terminal quando a sessão do terminal termina, ou seja, não há mais processos associados ao tty. Isso indica que seu programa foi encerrado e você não iniciou a sessão de terminal a partir de um shell interativo.

Existem várias maneiras de executar um comando no Terminal sem interagir manualmente com um shell, incluindo:

  1. Escolha o Shell > Novo comando e insira um comando. Deixe a caixa de seleção Executar comando dentro de um shell desmarcada. Seu programa será executado diretamente sem um shell. Se você abrir a janela do Inspetor e olhar para o painel de informações, verá que a lista de processos lista apenas "login" e seu comando, mas nenhum shell.

  2. Abra um arquivo *.command do Finder. O terminal iniciará um shell e o instruirá a executar o arquivo de comando e sair. Você verá um prompt de shell seguido de um comando parecido com: /path/to/your/file.command ; exit; . Novamente, se você olhar para o Inspector, a lista de processos incluirá “login”, seu shell e seu executável de comando. (Isso também acontece quando você seleciona Executar comando dentro de um shell no painel Novo comando ).

Parece que você está usando o # 2. Não há como alterar seu programa para que o shell permaneça interativo após a saída do seu programa; No entanto, existem algumas maneiras indiretas de o Terminal executar um comando e deixar você com um shell interativo:

  1. Crie um perfil de configurações que execute seu comando em um shell interativo:

    1. Em Preferências > Configurações duplicam o perfil padrão usando o menu ação (engrenagem) na parte inferior da lista de perfis.
    2. Vá para o painel Shell e selecione comando Executar: .
    3. Insira o nome do caminho em seu arquivo de comando.
    4. Selecione Executar dentro do shell .
    5. Exporte o perfil de configurações para um arquivo *.terminal , com o comando Exportar no menu de ação ou arrastando-o da lista de perfis para o Finder.

    Em seguida, sempre que você quiser criar um novo shell que comece executando o programa, abra o arquivo *.terminal . Você também pode simplesmente abrir um novo terminal com esse perfil a partir do Terminal, usando o Shell > New Window [ou Tab], ou clicando duas vezes no perfil na lista de perfis.

  2. Escreva um AppleScript que direcione o Terminal para executar seu comando, como se você tivesse digitado na linha de comando. Você pode então armazenar o script no menu Script de todo o sistema e chamá-lo de lá, ou pode salvar o script como um aplicativo que pode ser executado. O script ficaria assim, por exemplo:

    tell application "Terminal"
        activate
        do script "/path/to/your/file.command"
    end tell
    
por 24.01.2013 / 19:01