GNU/Linux >> Linux Esercitazione >  >> Linux

Impedisce a ssh di suddividere i parametri dello script della shell

Basato sulla risposta di Peter Lyons, ma consenti anche le virgolette all'interno degli argomenti:

#!/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}"

Funziona per tutto ciò che ho testato finora, tranne le nuove righe:

$ /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}"

Questo funziona per gli spazi. Non funziona se l'argomento ha un apice singolo incorporato.


Ottenere le citazioni giuste è piuttosto difficile e farlo in bash (in modo generale e robusto) è quasi impossibile.

Usa Perl:

#!/usr/bin/perl
use Net::OpenSSH;
my $ssh = Net::OpenSSH->new('[email protected]');
$ssh->system('printf', @ARGV);

Linux
  1. Comportamento imprevisto di uno script di shell?

  2. Impedire a Tmux di avviarsi su Ssh?

  3. Da dove viene eseguito uno script di shell?

  4. Come eseguire script Python dalla shell

  5. Come si ftp e si scaricano file da uno script di shell UNIX

Come prevenire il timeout di SSH

Esegui uno script reindirizzato da stdin (Linux/Shell Scripting)

Che cosa significa [e-mail protetta] in uno script di shell?

Come verificare se smtp funziona dalla riga di comando (Linux)

Esegui uno script di shell nel nuovo terminale dal terminale corrente

restituire il valore dallo script python allo script shell