exec comando com descritor de arquivo

1

Os comandos abaixo do unix estão funcionando bem quando eu estou executando como um script de shell:

#!/bin/bash
# Redirecting stdin using 'exec'.


exec 6<&0          # Link file descriptor #6 with stdin.
                   # Saves stdin.

exec < data-file   # stdin replaced by file "data-file"

read a1            # Reads first line of file "data-file".
read a2            # Reads second line of file "data-file."

echo
echo "Following lines read from file."
echo "-------------------------------"
echo $a1
echo $a2

echo; echo; echo

exec 0<&6 6<&-
#  Now restore stdin from fd #6, where it had been saved,
#+ and close fd #6 ( 6<&- ) to free it for other processes to use.
#
# <&6 6<&-    also works.

echo -n "Enter data  "
read b1  # Now "read" functions as expected, reading from normal stdin.
echo "Input read from stdin."
echo "----------------------"
echo "b1 = $b1"

echo

exit 0

Mas quando estou executando os comandos individualmente no terminal, o comando abaixo está dando o erro 'command not found':

exec < data-file
    
por Pankaj Pandey 04.12.2016 / 20:12

1 resposta

4

Se você der o comando exec < file , então o shell bash atual lerá sua entrada do arquivo , em vez de std-in.

Eu assumo o que acontece quando você dá os comandos individualmente no terminal é o comando exec funciona corretamente, e seu shell bash (interativo) atual começa a ler data-file (ao invés do seu teclado). Eu acho que esse arquivo de dados não contém comandos bash e, portanto, o bash responde com o comando não encontrado.

    
por Nick Sillito 04.12.2016 / 20:26