Como faço para passar o conteúdo de um arquivo como um parâmetro de linha de comando

5

Estou armazenando um caminho de arquivo em um arquivo e preciso passar o conteúdo desse arquivo como um argumento para um script de shell, especificamente o Maven, algo assim:

mvn -Dvar_name=(contents of file)

Isso funcionaria:

mvn -Dvar_name=(cat /path/to/file)

?

    
por devios1 11.12.2012 / 20:45

2 respostas

9

Isso pode ser feito usando a substituição de comandos, assim:

mvn -Dvar_name="$(cat /path/to/file)" # POSIX
mvn -Dvar_name="$(</path/to/file)"    # bash

Isso tem uma advertência notável, porém, a saber, que todas as novas linhas são removidas. Se isso não importa, então, isso deve funcionar.

Se você realmente quer ler apenas uma linha, você pode usar read , assim:

IFS= read -r line < /path/to/file
mvn -Dvar_name="$line"
    
por 11.12.2012 / 20:48
6

Para a substituição de comandos, você precisa usar $() ou backticks ''.

Também é importante que você cite a substituição ou ela se expandirá em vários argumentos se o arquivo contiver mais de uma palavra. Aqui estão alguns exemplos:

mvn -Dvar_name="$(< /path/to/file)" # bash

mvn -Dvar_name="$(cat /path/to/file)" # POSIX
    
por 11.12.2012 / 20:49