Pergunta

Meu $ SHELL é tcsh. Eu quero executar um script c shell que irá chamar um programa muitas vezes com alguns argumentos alteradas cada vez. O programa que eu preciso chamada está em Fortran. Eu não quero para editá-lo. O programa leva apenas argumentos, uma vez que é executado, mas não na linha de comando. No ligando para o programa no script, o programa assume o controle (isto é onde eu estou preso no momento, eu nunca pode sair porque o script não executará nada até depois do processo de programa pára); neste momento eu preciso passá-lo algumas variáveis, em seguida, depois de várias iterações vou precisar de ctrl-c fora do programa e continuar com o script.

Como isso pode ser feito?

Foi útil?

Solução

Para adicionar ao que @Toybuilder disse, você pode usar um "aqui documento". Ou seja, seu script poderia ter

./myfortranprogram << EOF
first line of input
second line of input
EOF

Tudo entre o "<<EOF" eo "EOF" será alimentado para a entrada padrão do programa (não Fortran ainda usam "ler (5, *)" para ler da entrada padrão?)

E porque eu acho @ de ephemient comentário merece estar na resposta:

Alguns mais dicas: << impede 'EOF' interpolação no corpo aqui-doc; << - EOF remove todas as guias principais (assim você pode recuar o aqui-doc para combinar seus arredores), e pode ser EOF substituído por qualquer token. Um token vazia (<< "") indica a-doc aqui que pára na primeira linha vazia.

Eu não tenho certeza de como portátil aqueles são, ou se eles são extensões apenas tcsh -. Eu usei apenas o tipo <<EOF "aqui documento" me

Outras dicas

O que você deseja usar é Esperar .

Uhm, você pode alimentar o seu código Fortran com um redirecionamento? Você pode criar um arquivo temporário com suas entradas, e depois canalizá-lo com o redirecionamento stdin (<).

Não é um usuário tcsh, mas se o programa é executado, em seguida, lê os comandos via stdin então você pode usar < redirecionamento shell para alimentá-lo os comandos necessários. Se você executá-lo em segundo plano com & você não vai bloquear quando ele é executado. Então você pode sleep para um pouco, em seguida, usar o que você tem ferramentas (ps, grep, awk, etc) para descobrir PID do programa, em seguida, usar kill para enviá-lo SIGTERM que é o mesmo que fazer um ctrl-c.

Este é um trabalho para o programa unix esperar, que bem pode e facilmente interativamente comandar programas e responder às suas solicitações.

Eu fui enviado aqui após ser informado minha pergunta era perto de ser uma duplicata de um presente.

FWIW, eu tive um problema semelhante com um script shell csh C.

Este trecho de código foi permitindo que o custom_command para executar sem obter qualquer argumentos de entrada:

foreach f ($forecastTimes)
    custom_command << EOF
        arg1=x$f;2
        arg2=ya
        arg3=z,z$f
        run
        exit
        EOF
end

Não funcionou a primeira vez que tentou fazê-lo, mas depois que eu backspaced fora todo o espaço em branco em que seção do código que eu removido o espaço entre o "<<" e "EOF". Eu também backspaced o fechamento "EOF" todo o caminho para a margem esquerda. Depois disso ele trabalhou:

foreach f ($forecastTimes)
    custom_command <<EOF
        arg1=x$f;2
        arg2=ya
        arg3=z,z$f
        run
        exit
EOF
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top