Basé sur la réponse de Peter Lyons, mais autorisez également les guillemets à l'intérieur des arguments :
#!/bin/bash
QUOTE_ARGS=''
for ARG in "[email protected]"
do
ARG=$(printf "%q" "$ARG")
QUOTE_ARGS="${QUOTE_ARGS} $ARG"
done
ssh [email protected] "printf ${QUOTE_ARGS}"
Cela fonctionne pour tout ce que j'ai testé jusqu'à présent, à l'exception des retours à la ligne :
$ /tmp/wrap_printf "[-%s-]" "hello'\$t\""
[-hello'$t"-]
#!/bin/sh
QUOTE_ARGS=''
for ARG in "[email protected]"
do
QUOTE_ARGS="${QUOTE_ARGS} '${ARG}'"
done
ssh [email protected] "${QUOTE_ARGS}"
Cela fonctionne pour les espaces. Cela ne fonctionne pas si l'argument a un guillemet simple intégré.
Obtenir des citations correctes est assez difficile et le faire en bash (de manière générale et robuste) presque impossible.
Utiliser Perl :
#!/usr/bin/perl
use Net::OpenSSH;
my $ssh = Net::OpenSSH->new('[email protected]');
$ssh->system('printf', @ARGV);