dans ce script, je me retrouve avec "$ 1" en cours d'enregistrement dans le fichier / test.
#!/bin/bash
cat > /test << 'EOF'
$1
EOF
la vérité est .. je dois garder
'EOF'
comme 'EOF' parce que mon argument (1 $) contient des signes dollar.
mais j'ai besoin que cet argument soit sauvegardé plutôt que 1 $
bash
shell-script
cat
here-document
user72685
la source
la source
$1
) contient des signes dollar.' Pas s'il fait référence au premier paramètre de ligne de commande. La substitution a été effectuée avant l'exécution de votre script. Vous devez y échapper sur la ligne de commande.cat
et conserver les signes dollar», mais «Je veux modifier lehttpd.conf
pour changer <un paramètre> de <cette manière>».Réponses:
Pour donner suite à votre question précédente , il semble que vous souhaitiez à la fois du texte non interprété et du texte interprété dans un fichier. Dans ce cas, utilisez deux
cat
s (ouecho
s) différents:Il y a quelques choses qui se passent ici: premièrement, la syntaxe heredoc avec
<<
. Si vous incluez des guillemets dans cette chaîne de terminaison, comme dans la première ci-dessus, l'hérédoc entier n'est pas interprété - pas de paramètres et pas de substitutions. Si vous n'utilisez pas de guillemets, comme dans la secondecat
ci-dessus, les variables comme$1
seront remplacées par leurs valeurs et les substitutions de commandes seront incluses dans le texte. Vous choisissez entre citer la chaîne "EOF" ou non selon que vous voulez ou non des substitutions.Pour mettre les deux
cat
s dans le même fichier, nous utilisons la>>
redirection pour les deuxièmes (et plus tard) redirections: cela signifie ajouter au fichier. Pour le premier, nous utilisons un seul>
pour effacer le fichier et recommencer à zéro.Notez que, même lorsque des variables sont substituées , tous les signes dollar supplémentaires dans la valeur de cette variable ne sont pas eux-mêmes remplacés de nouveau:
affichera:
sans y substituer de
$bar
valeur.Cependant, si vous fournissez un "$" dans l'argument de tout ce script, vous devez l'échapper sur la ligne de commande ou mettre le tout entre guillemets simples. Alternativement, la substitution de commandes comme dans votre autre question vous permet de mettre directement le contenu d'un fichier entier, y compris les signes dollar dans le contenu du fichier. Assurez-vous de citer la chaîne de substitution ici:
obtiendra le corps de
myfile
as$1
et pourra ensuitecat
ouecho
selon les besoins. Les mêmes limites que dans ma réponse s'appliquent: il y a une limite pour la durée des arguments de ligne de commande, et si votre fichier peut devenir plus long que cela, vous devriez trouver une autre approche. Vous pouvez découvrir quelle est la limite de votre système avecgetconf ARG_MAX
la source
On dirait que vous voulez simplement sortir la variable dans le fichier. Dans ce cas, cela fonctionnera:
Notez qu'il se
/test
trouve dans le répertoire racine, pour lequel les utilisateurs ordinaires n'ont généralement pas de droit d'écriture.EDIT: Gardez à l'esprit que vous devez citer la chaîne contenant le signe dollar dans la ligne de commande . C'est là que la substitution se produit, et le script ne peut rien y faire après coup.
la source