Comment utiliser bash $(awk) en simple ssh-commande?
Je suis en train d'exécuter une commande unique sur ssh
qui contient des " sous-code` ou $(sous-code) (je l'utilise tout le temps, mais je ne sais pas le nom officiel pour ça) pour être exécuté en premier, mais sur le serveur cible.
Pour les besoins de la discussion, disons que c'est la commande que je veux utiliser. Bien sûr, cela peut être fait avec hostname
, mais c'est juste un exemple simplifié qui contient toute la mise en forme de magie que je veux utiliser.
echo `uname -a | awk '{print $2}'`
Pas de problème. Mais comment voulez-vous échapper à cette correctement pour l'envoyer plus de ssh
en une seule commande? Le suivant est incorrect, car elle permet à la réponse du serveur, votre nom d'hôte local. Le sous-code est exécuté localement:
ssh myServer echo `uname -a | awk '{print $2}'`
Mais tout d'échappement ishness qui vient à l'esprit ne fonctionne pas:
$ ssh myServer echo \`uname -a | awk '{print $2}'\`
awk: cmd. line:1: {print $2}`
awk: cmd. line:1: ^ invalid char '`' in expression
$ ssh myServer echo $(uname -a | awk '{print $2}')
bash: syntax error near unexpected token `('
$ ssh myServer echo $\(uname -a | awk '{print $2}')
bash: syntax error near unexpected token `)'
$ ssh myServer echo $\(uname -a | awk '{print $2}'\)
awk: cmd. line:1: {print $2})
awk: cmd. line:1: ^ syntax error
bash: -c: line 0: unexpected EOF while looking for matching `)'
bash: -c: line 1: syntax error: unexpected end of file
Je voudrais une réponse qui comprend l'utilisation de échappées ` or $() because I'd like to know if it's possible.
echo` pourrait être quelque chose de plus compliqué.
- pourquoi
echo `command`
? pourquoi ne pascommand
? - parce qu'il veut voir comment passer un backtick ou un
$(
via ssh à un serveur distant
Vous devez vous connecter pour publier un commentaire.
Essayer cette
Utiliser les guillemets doubles
"
afin de grouper les commandes exécuter à distance.Vous aussi vous avez besoin pour échapper à la
$
dans le$2
argument, de sorte qu'il n'est pas calculé localement, mais transmis àawk
à distance.Edit:
Si vous souhaitez inclure la
$(
)
, vous avez pour échapper à la$
symbole, comme ceci:Vous pouvez également échapper à la backtick", comme ceci:
$(
et le backtick sur ssh. Juste mis à jour ma réponse...res=`ls | awk '{print \\$2}'`
, nous avons besoin de deux échapper ici.Qu'en transférant la sortie de la commande et exécutez awk localement?
La solution de contournement consiste à créer un sh fichier avec la commande puis la passer à la commande ssh:
test.sh
et commande:
Mise à JOUR:
La commande sans les guillemets fonctionne très bien ainsi:
Il est préférable d'utiliser un heredoc avec
ssh
pour éviter d'échapper les guillemets partout dans un complexe de commande:Si vous essayez d'obtenir le nom d'hôte, utilisez:
ssh myServer "uname -n"