arquivo de origem como argumento?

1

Eu li sobre o uso de fonte para executar outro arquivo dentro de outro:

source ./filename

mas eu quero fazer isso dentro de um comando como um argumento .. (ou conjunto de)

Veja como está o comando:

command \
-argument \
-argument \
source ./file
-argument \
...

O arquivo basicamente conteria um conjunto de outros argumentos:

-argument \
-argument \

Como faço isso? rodando como está, faria o comando falhar ..

    
por Timmo 02.10.2015 / 20:33

2 respostas

3

Essencialmente, você quer o conteúdo de filename como argumentos. Isso pode ser feito facilmente, se seus argumentos não tiverem operadores de espaço em branco ou globbing:

command \
-argument \
-argument \
$(cat ./file) \
-argument \
...

Se seus argumentos não contiverem novas linhas, ou algum outro caractere, então você poderia usar esse caractere como um delimitador e construir a lista de argumentos:

#! /bin/bash
args=()
while IFS= read -r arg
do
    args+=("$arg")
done < filename
command \
-argument \
-argument \
"${args[@]}" \
-argument \
...

Se, digamos, os argumentos não contiverem | , você poderá fazer:

while IFS= read -d'|' -r arg

Onde o arquivo contém:

-arg1 something|-arg2
something else|-arg3 ...
    
por 02.10.2015 / 21:04
1
command \
-argument \
-argument \
$(cat ./file) \
-argument \
...

trabalharia com

-argument 
-argument 

ou

-argument -argument

como ./file . O shell irá dividi-lo em $IFS (guia, nova linha, espaço por padrão) se o $(cat ./file) for deixado nu, sem aspas duplas.

Uma alternativa em que você não precisaria remover as barras poderia ser a construção de uma string e, em seguida, eval it.

    
por 02.10.2015 / 20:55