GNU/Linux >> Znalost Linux >  >> Linux

Zabraňte ssh v rozbití parametrů skriptu shellu

Na základě odpovědi od Petera Lyonse, ale také povolit uvozovky uvnitř argumentů:

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

Toto funguje pro vše, co jsem dosud testoval, kromě nových řádků:

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

Toto funguje pro prostory. Nefunguje, pokud má argument vloženou jednoduchou uvozovku.


Správné citování je docela těžké a dělat to v bash (obecným a robustním způsobem) je téměř nemožné.

Použijte Perl:

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

Linux
  1. Jak zjistit, zda je Shell řízen z Ssh?

  2. Shell Script Wrapper zabránit spuštění příkazu bez argumentů?

  3. Zabránit spuštění Tmux na Ssh?

  1. Zabránit Sigintu v dosahování dětských procesů?

  2. Jak mohu ftp a stáhnout soubory ze skriptu prostředí UNIX

  3. Bash skript:Použití příkazu script z bash skriptu pro protokolování relace

  1. Otevřete Vim ze skriptu prostředí Bash

  2. Spuštění skriptu z stdin (Linux/Shell Scripting)

  3. Co znamená [email protected] ve skriptu shellu?