Portál AbcLinuxu, 7. května 2025 07:34

Dotaz: ssh command

9.3.2023 09:13 Pepa
ssh command
Přečteno: 277×
Odpovědět | Admin
Ahoj, mám 2 podobné příkazy, ale s rozdílnými výstupy. Mohl by mi někdo vysvětlit, proč je výsledek pokaždé jiný?


bash -c "echo 1 2 3 ; echo 11 22 33"
1 2 3
11 22 33


ssh nekam bash -c "echo 1 2 3 ; echo 11 22 33"

11 22 33



Proč nejsou výsledky v obou případech stejné?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.3.2023 09:42 Bohatyr
Rozbalit Rozbalit vše Re: ssh command
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj,

protoze ti chybi v druhem prikladu zpetne lomitko?

ssh nekam bash -c "echo 1 2 3 \; echo 11 22 33"
9.3.2023 10:13 Pepa
Rozbalit Rozbalit vše Re: ssh command
Pokud tam vložím zpětné lomítko, tak by se mělo vypsat

1 2 3 ; echo 11 22 33

Neboli to zpětné lomítko se interpretuje jako běžný text a ne jako oddělovač - konec příkazu.
To nevysvětluje můj dotaz.
9.3.2023 10:48 Petr
Rozbalit Rozbalit vše Re: ssh command
A jde ti o funkčnost, nebo to je nějaký test? :)

ssh nekam "bash -c \"echo 1 2 3; echo 11 22 33\""

ssh nekam "echo 1 2 3; echo 11 22 33"

...
9.3.2023 12:42 Pepa
Rozbalit Rozbalit vše Re: ssh command
Není to test.
Prostě se to chovalo jinak, než jsem čekal a chtěl jsem přijít na to, kde uvažuji špatně.
Řešení 1× (Andrej)
9.3.2023 11:05 Vlado99 | skóre: 11 | blog: vlado99
Rozbalit Rozbalit vše Re: ssh command
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj. Problém je v nedostatočnej ochrane parametrov - málo úvodzoviek/apostrofov.

Čo sa deje v prípade príkazu
    bash -c "echo 1 2 3 ; echo 11 22 33" 
1. Tvoj shell, ktorý obsluhuje terminál, rozparsuje riadok na
    bash
    -c
    echo 1 2 3 ; echo 11 22 33
2. Tvoj shell spustí program "bash" a dá mu parametre "-c" a "echo 1 2 3 ; echo 11 22 33".

3. bash rozparsuje a vykoná to, čo je v stringu "echo 1 2 3 ; echo 11 22 33" a skončí.

Čo sa deje v prípade príkazu
    ssh nekam bash -c "echo 1 2 3 ; echo 11 22 33"
1. Tvoj shell rozparsuje riadok na
    ssh
    nekam
    bash
    -c
    echo 1 2 3 ; echo 11 22 33
2. Tvoj shell spustí ssh s vyššie uvedenými parametrami.

3. ssh nadviaže spojenie "nekam", tam spustí shell toho usera, a odovzdá mu string
    bash -c echo 1 2 3 ; echo 11 22 33
4. Ten vzdialený shell riadok rozparsuje na
    bash
    -c
    echo
    1
    2
    3
    ;
    echo
    11
    22
    33
5. Vzdialený shell spustí bash, s parametrami "-c" a "echo" - výsledkom je prázdny riadok na stdout. Parametre "1" "2" a "3" sú parametre vzdialeného shellu, nie spúšťaného bashu.

6. Vzdialený shell (nie ten bash, spomínaný v predchádzajúcom bode) potom vykoná druhý príkaz: echo 11 22 33 - výsledkom je výstup 11 22 33 na stdout.

7. ssh prenesie obsah stdout zo vzdialeného stroja na Tvoj terminál.
9.3.2023 12:40 Pepa
Rozbalit Rozbalit vše Re: ssh command
Krásný výklad. Pochopil jsem.
Dík.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.