Para o bash,
swipl -s jobshop.chr < CHRInput &> output
No Unix / Linux, você pode usar pipes para gravar fluxos de saída e erro em um arquivo. Pode-se até escrevê-los no mesmo arquivo. Existe uma maneira de gravar ambos no arquivo, mas mantendo o pedido. Esta afirmação:
swipl -s jobshop.chr < CHRInput > output 2> output
realmente produz um arquivo chamado "output" com o fluxo de saída e de erro (normalmente essa era a interação do console com o usuário). Mas o fluxo de saída é gravado antes do fluxo de erros (ao trabalhar com um console interativo produzirá fluxos de erro e de saída intercalados).
swipl -s jobshop.chr < CHRInput > output 2>&1
2>&1
significa "descritor de arquivo de redirecionamento 2 (erro padrão) para o descritor de arquivo 1 (saída padrão) conectado". Observe que 2>&1
tem que vir após o redirecionamento da saída padrão: 2>&1 >output
primeiro enviaria fd 2 para qualquer fd 1 conectado no momento (ou seja, o terminal) e redirecionaria fd 1 para o terminal.
Observe que, dependendo de como o programa é gravado, isso pode não intercalar a saída na mesma ordem como se estivesse sendo executado em um terminal. Isso ocorre porque muitos programas armazenam em buffer a saída no stdout, ou seja, eles só gravam dados quando o buffer está cheio. Mas quando a saída padrão é conectada a um terminal, ela é armazenada em buffer de linha, ou seja, cada linha é gravada mesmo se o buffer não estiver cheio. (Stderr, por outro lado, não é armazenado em buffer por padrão). Portanto, se o programa gravar linhas inteiras sem cuidar dos buffers de liberação ou alterar as configurações padrão, você espera que eles sejam gravados no erro padrão ou na saída padrão. , redirecionando para um arquivo pode não funcionar.
Em sistemas Linux razoavelmente recentes, se a saída redirecionada tiver linhas fora de ordem, tente
stdbuf -oL -oL swipl -s jobshop.chr <CHRInput >output 2>&1
Tags shell io-redirection