Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/08/2018, à 22: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, à 13:09)

Hors ligne

#2 Le 08/08/2018, à 22: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, à 23:12)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 08/08/2018, à 23: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, à 23: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, à 23:11)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 08/08/2018, à 23: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 smile
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, à 23:25)

Hors ligne

#6 Le 09/08/2018, à 00: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 09/08/2018, à 00: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, à 01: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... hmm

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, à 02: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, à 02:06)

Hors ligne

#10 Le 09/08/2018, à 02: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, à 02: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, à 02:57)

Hors ligne

#12 Le 09/08/2018, à 03: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, à 04: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, à 11:54)

Hors ligne