Como acessar o conteúdo de um arquivo que é usado como um argumento ao executar um script bash?

1

Estou executando um script bash com seus parâmetros / argumentos como arquivos. De dentro do script, como obtenho o conteúdo desses arquivos?

Eu corro o script com esta linha de comando:

sh script_name animal.txt stars.txt

animal.txt contém "girafa".

Do script, como obtenho o conteúdo (girafa) de animal.txt ? Eu sou muito novo para bash scripts, então qualquer ajuda é apreciada, obrigado.

    
por eltigre 20.01.2015 / 04:21

3 respostas

2
for f do exec <"$f"
    : handle stdin
done

Um shell não interativo tratará qualquer redirecionamento de um arquivo que não possa ser lido ou que não exista quando associado a um especial especial como um erro fatal e saia imediatamente com uma mensagem de diagnóstico significativa gravada no stderr. Portanto, seus parâmetros são arquivos legíveis e válidos, e a instrução acima não fará nada útil até que você substitua a : ... parte w / alguma coisa útil ou o usuário forneça um parâmetro inválido e o script saia de forma significativa.

Quando você faz ...

for var in ...; do : compound command list on "$var"; done

O in ...; bit é uma instrução opcional na sintaxe que permite substituir um conjunto de parâmetros para o conjunto padrão - que é sua lista de argumentos.

Então ...

for var do : compound command list on "$var"; done

... é provavelmente o que você está procurando aqui.

for f do exec <"$f"
    : now do some stuff w/ stdin
done

... onde o shell irá atribuir iterativamente a stdin e validar como arquivos legíveis, quaisquer argumentos forneceram seu script para todos os comandos que seguem a instrução exec até que todos os parâmetros estejam esgotados e o for loop seja done . Se não puder fazer isso, formatará e imprimirá sua mensagem de erro em um formulário padrão ao qual o usuário já está acostumado.

    
por 20.01.2015 / 06:18
0
first_file="$1"
test -f "$first_file" || exit 2
file_content="$(<"$first_file")"
echo "$file_content"
    
por 20.01.2015 / 04:37
-1

Você pode fazer isso:

#!/bin/bash
while read line ;
    echo "$line"
    #######
    #######
    ########
done < "$1"

description: cada linha $ é um conteúdo da linha completa do seu arquivo.

usage : ./script.sh file.txt
    
por 20.01.2015 / 04:35