Basierend auf der Antwort von Peter Lyons, aber auch Anführungszeichen innerhalb von Argumenten zulassen:
#!/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}"
Dies funktioniert für alles, was ich bisher getestet habe, außer für Zeilenumbrüche:
$ /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}"
Dies funktioniert für Leerzeichen. Es funktioniert nicht, wenn das Argument ein eingebettetes einfaches Anführungszeichen enthält.
Das richtige Zitieren ist ziemlich schwierig und es in Bash (auf allgemeine und robuste Weise) fast unmöglich.
Verwenden Sie Perl:
#!/usr/bin/perl
use Net::OpenSSH;
my $ssh = Net::OpenSSH->new('[email protected]');
$ssh->system('printf', @ARGV);