Como eu incluo várias linhas envolvendo variáveis no final de um script bash?

2

Gostaria de adicionar:

function ps_mem {
   python /home/vagrant/ps_mem/ps_mem.py -p $@
}

Ao final de ~/.bashrc da linha de comando. Eu tentei usar:

printf "function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p $@ \n}" >> ~/.bashrc

E, embora tenha quase funcionado, o campo de entrada $@ foi ignorado, fazendo isso:

function ps_mem {
 python /home/vagrant/ps_mem/ps_mem.py -p
}

Em vez disso, seja adicionado ao final de ~/.bashrc .

    
por Brenton Horne 27.10.2015 / 08:08

4 respostas

2

Outras respostas foram dadas, que funcionarão, mas com o espírito de ajudar você a fazer exatamente do jeito que você estava tentando (já que é uma maneira totalmente boa de fazê-lo):

Aqui está o original:

printf "function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p $@ \n}" >> ~/.bashrc

Aqui está uma versão que funciona:

printf 'function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p $@ \n}' >> ~/.bashrc

Eu recomendo adicionar aspas duplas em torno de $@ também:

printf 'function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p "$@" \n}' >> ~/.bashrc

Expansão variável é ativada entre aspas duplas; desativado entre aspas simples.

    
por 27.10.2015 / 09:29
5

Use um documento aqui para esses trabalhos:

cat <<'EOF' >>~/.bashrc
function ps_mem {
   python /home/vagrant/ps_mem/ps_mem.py -p "$@"
}
EOF

Caracteres especiais dentro de um documento aqui não serão expandidos pelo shell quando <<'EOF' for citado. De POSIX Linguagem de Comando Shell :

If any character in word is quoted, [...] the here-document lines shall not be expanded.

    
por 27.10.2015 / 08:13
3

O printf na pergunta original funciona se você substituir as aspas duplas " por aspas simples.

Eu gosto de usar printf dessa maneira. Não há regras especiais de cotação como em here documents . E não pensando em \n . O que você vê é o que você ganha:

printf '%s' '
function ps_mem {
   python /home/vagrant/ps_mem/ps_mem.py -p "$@"
}
' >> ~/.bashrc
    
por 27.10.2015 / 09:06
0

Para obter a saída desejada, você pode usar a sequência de escape, como

  python /home/vagrant/ps_mem/ps_mem.py -p \$@ 
    
por 27.10.2015 / 08:26