Adicionando backtick (') à saída heredoc no comando shell

1

Eu preciso adicionar um modificador de prompt cmd, PS1="..." dentro de um script de shell que estou configurando. O problema é que estou usando o backtick para executar um comando antes do comando principal:

sudo tee ~/.bashrc <<EOF

# Display absolute path in cmd line, cmds on new line
PS1='\['[ $? = 0 ] && X=2 || X=1; tput setaf $X'\]\h [\u]\['tput sgr0'\]:$PWD\n\$ '

EOF

cat ~/.bashrc dá:

# Display absolute path in cmd line, cmds on new line
PS1='\[\]\h [\u]\[\]:/Users/myuser/Library/Application Support/Sublime Text 3/Packages/User\n$ '

nano ~/bashrc dá:

PS1='\[^[[32m\]\h [\u]\[^[(B^[[m\]:/Users/myuser/Library/Application Support/Sublime Text 3/Packages/User\n$ '

Isso significa claramente que tudo no backtick não é lido corretamente. Como posso escapar do backtick ou escrever uma linha que inclua um backtick em um arquivo usando o shell?

    
por Growler 02.01.2017 / 22:54

1 resposta

2

No documento here, como você o escreveu, o shell fará expansão de parâmetro ( $PWD será expandido para o caminho do diretório atual no momento da análise do script , por exemplo), substituição de comando (os "backticks" serão executados e tudo o que o comando produzir será inserido em seu lugar, no momento da análise do aqui-documento) e expansão aritmética (nada disso no seu caso).

Se você não quiser isso, ou seja, você quer que o conteúdo do documento seja entregue como está, você pode fazer isso:

tee -a "$HOME/.bashrc" <<'EOF'

# contents of here-document here

EOF

Os apóstrofos em torno do EOF na primeira linha impedem que o shell expanda qualquer coisa no próprio documento here.

    
por 02.01.2017 / 23:21