#1 Le 08/08/2018, à 21:01
- Lxct
[Non résolu] Caractères spéciaux dans les argument d'une commande
Bonjour, je souhaite envoyer une commande à mon serveur minecraft directement depuis la ligne de commande à l'aide du script suivant :
cmd=$(printf "%s\r" "$*")=${cmd/'/\\'}
screen -S minecraft -p 0 -X stuff "$cmd^M"
(La commande cmd redirige vers ce script)
Ce script marche très bien, cependant, lorsqu'on essaye d'insérer des guillemets et des antislash, tout foire.
Beaucoup de commandes que j'envoie contiennent les caractères suivants :
- "
- '
- \"
- \'
Jusqu'a maintenant, je me contentait de remplacer les guillemets par ca : \"
Mais il m'est impossible d'envoyer certaines commandes, par exemple :
cmd give @p minecraft:sign{BlockEntityTag:{Text1:"{\"text\":\"\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"tellraw @a [\\\"\\\",{\\\"text\\\":\\\"Lien google : \\\",\\\"color\\\":\\\"green\\\",\\\"clickEvent\\\":{\\\"action\\\":\\\"open_url\\\",\\\"value\\\":\\\"https://google.com\\\"}},{\\\"text\\\":\\\"Cliquez ici\\\",\\\"color\\\":\\\"aqua\\\",\\\"clickEvent\\\":{\\\"action\\\":\\\"open_url\\\",\\\"value\\\":\\\"https://google.com\\\"}}]\"}}",Text2:"{\"text\":\"Cliquez ici !\"}"},display:{Name:"{\"text\":\"Panneau personnalis\\u00e9\"}"}}
Je voudrais savoir si il y avait un moyen de contourner cela.
Pour envoyer des commandes contenant un ou plusieurs caractères spéciaux d'affilé.
Merci de votre réponse.
Dernière modification par Lxct (Le 09/08/2018, à 12:09)
Hors ligne
#2 Le 08/08/2018, à 21:48
- Watael
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
salut,
je ne suis normalement pas partisan des fichiers temporaire, mais là...
donc, tu tapes ta commande dans un fichier, puis tu en développes le contenu avec une forme particulière de Substitution de commande :
screen... "$(< fichierCommande)"
je ne peux pas tester (pas de serveur minecraft !), tiens-nous au courant.
Dernière modification par Watael (Le 08/08/2018, à 22:12)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 08/08/2018, à 22:04
- Lxct
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
Merci pour la réponse !
Je ne vois pas comment appréhender le problème avec la substitution de commandes, $cmd est une variable et cmd est la commande qui exécute le petit script que j'ai envoyé au dessus.
Voilà comment j'envoie une commande à mon serveur : cmd [commande minecraft]
Exemple : cmd say Hello!
Hors ligne
#4 Le 08/08/2018, à 22:11
- Watael
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
avant d'être une variable, c'est une chaîne de texte !
donc, au lieu de taper la commande dans une variable, tu la tapes dans un here-doc pour la rediriger vers un fichier :
cat <<EOF >/repertoire/fichierCommande
ta commande qui "pourrait" être dans une variable, mais que tu envoies dans un fichier
EOF
Dernière modification par Watael (Le 08/08/2018, à 22:11)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 08/08/2018, à 22:25
- Lxct
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
Merci de l'indication, c'est beaucoup plus clair maintenant
Voilà où j'en suis dans mon script "cmd"
Le problème semble être différent à présent, dans mon fichier commande (/srv/tmp/cmd), je peux mettre n'importe quel caractère, tout marche à merveille !
Cependant, je souhaiterais pouvoir modifier ce fichier directement depuis la commande cmd, pour des raisons pratiques, toujours sur le format "cmd [commande]"
Lorsque j'utilise ce script :
cat <<EOF >/srv/tmp/cmd
$*
EOF
screen -S minecraft -p 0 -X stuff "$(< /srv/tmp/cmd)^M"
Ou celui ci :
echo $* > /srv/tmp/cmd
screen -S minecraft -p 0 -X stuff "$(< /srv/tmp/cmd)^M"
> /srv/tmp/cmd
Je me retrouve encore sur l'erreur précédente
Dernière modification par Lxct (Le 08/08/2018, à 22:25)
Hors ligne
#6 Le 08/08/2018, à 23:06
- Watael
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
vu le niveau d'erreurs potentielles lors de la saisie de la commande à passer au serveur, inscris la dans un fichier, et donne le nom du fichier en argument au script.
c'est (en gros) toujours la même commande, avec certaines données qui changent, ou est-ce des commandes toujours complètement différentes ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 08/08/2018, à 23:13
- Lxct
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
Les commandes sont toujours différentes
Hors ligne
#8 Le 09/08/2018, à 00:28
- Watael
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
hmm.
ne pouvant pas tester, je ne peux que deviner...
screen... $(printf '%q\n' "$@")
ceci devrait protéger automatiquement les caractères spéciaux.
sur un bash récent, cette fonctionnalité existe en tant que Remplacement de variables :
screen... "${@@Q}"
les deux sorties produites ne sont pas exactement identiques.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 09/08/2018, à 01:03
- Lxct
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
La première commande semble effectivement protéger les caractères spéciaux (Les saut de lignes sont remplacés par \n), mais ce n'est pas exactement ce que je recherche, en revanche la second expression me renvois l'erreur suivante :
-bash: ${@@Q}: bad substitution
Dernière modification par Lxct (Le 09/08/2018, à 01:06)
Hors ligne
#10 Le 09/08/2018, à 01:04
- Watael
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
$ echo $BASH_VERSION
4.4.23(1)-release
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 09/08/2018, à 01:52
- Lxct
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
Mon bash est en version 4.2
Edit :
Pour reformuler plus clairement ce que je veux, je souhaiterais juste que tout ce qui se trouve après la commande "cmd" reste intact.
Exemple :
cmd say '"test
Donnera say '"test
Dernière modification par Lxct (Le 09/08/2018, à 01:57)
Hors ligne
#12 Le 09/08/2018, à 02:51
- Watael
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
il y a des messages d'erreurs ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 09/08/2018, à 03:01
- Lxct
Re : [Non résolu] Caractères spéciaux dans les argument d'une commande
"${@@Q}" n'est pas compatible avec ma version de bash
$(printf '%q\n' "$@") ne correspond pas a ce que j'attend, car il ne résoud pas le problème des antislash et des guillemets.
La seule solution que j'ai trouvé pour l'instant est de préserver tout ce qu'il y a après la commande "cmd" (sans modifier quoi que ce soit) et de l'écrire dans un fichier texte. Mais je ne sais pas comment faire
Dernière modification par Lxct (Le 09/08/2018, à 10:54)
Hors ligne