Neste script, acabo com "$ 1" sendo salvo no arquivo / test.
#!/bin/bash
cat > /test << 'EOF'
$1
EOF
a verdade é .. eu preciso manter
'EOF'
como 'EOF' porque meu argumento (US $ 1) contém cifrões.
mas preciso que esse argumento seja salvo em vez de US $ 1
bash
shell-script
cat
here-document
user72685
fonte
fonte
$1
) contém cifrões.' Não se for o primeiro parâmetro da linha de comandos. A substituição foi realizada antes que seu script fosse executado. Você tem que escapar na linha de comando.cat
e manter cifrões", mas "Quero modificar o itemhttpd.conf
para alterar <alguma configuração> desta <desta maneira>".Respostas:
Dando seguimento a sua pergunta anterior , parece que você quer tanto um texto não-interpretada e algum texto interpretado entrar em um arquivo. Nesse caso, use dois
cat
s diferentesecho
:Há algumas coisas acontecendo aqui: primeiro, a sintaxe do heredoc
<<
. Se você incluir aspas nessa sequência terminadora, como na primeira acima, todo o heredoc não será interpretado - sem parâmetros e sem substituições. Se você não usar aspas, como no segundocat
acima, variáveis como$1
serão substituídas por seus valores e substituições de comandos serão incluídas no texto. Você escolhe entre citar a sequência "EOF" ou não, com base em se deseja ou não substituições.Para colocar os dois
cat
s no mesmo arquivo, estamos usando o>>
redirecionamento para o segundo (e mais tarde) redirecionamentos: isso significa anexar ao arquivo. Para o primeiro, usamos um único>
para limpar o arquivo e começar do zero.Observe que, mesmo quando as variáveis são substituídas , quaisquer cifrões adicionais no valor dessa variável não são re-substituídos:
irá produzir:
sem substituir
$bar
o valor de.No entanto, se você estiver fornecendo um "$" no argumento para todo esse script, precisará escapá-lo na linha de comando ou incluir tudo entre aspas simples. Como alternativa, a substituição de comandos , como em sua outra pergunta, permite inserir diretamente o conteúdo de um arquivo inteiro, incluindo quaisquer cifrões no conteúdo do arquivo. Certifique-se de citar a cadeia de substituição aqui:
obterá o corpo de
myfile
como$1
e pode entãocat
ouecho
como necessário. As mesmas limitações da minha resposta são aplicáveis: há um limite para quanto tempo os argumentos da linha de comando podem durar e se o seu arquivo pode demorar mais do que isso, você deve encontrar outra abordagem. Você pode descobrir qual é o limite no seu sistema comgetconf ARG_MAX
fonte
Parece que você simplesmente deseja exibir a única variável no arquivo. Nesse caso, isso funcionará:
Observe que
/test
está no diretório raiz, para o qual os usuários comuns geralmente não têm permissão de gravação.EDIT: Lembre-se de que é necessário citar a seqüência de caracteres que contém o sinal de dólar na linha de comando . É aí que a substituição ocorre, e o script não pode fazer nada a respeito depois do fato.
fonte