Имя переменной пусто при использовании «для f в каталоге», несмотря на непустую директорию - PullRequest
1 голос
/ 17 июня 2019

Я подключен к удаленной машине через SSH как часть скрипта bash.После перехода в каталог я запускаю ls, который подтверждает, что найдены подходящие файлы.Однако затем я пытаюсь перебрать файлы и запустить другие команды для них, и переменная теперь пуста.

Код:

    echo "DOING STUFF!"
    cd /mnt/slowdata/ls8_processing
    ls
    for f in *.tar.gz
    do
        echo $f
    done

Вывод:

DOING STUFF!
LC080330242019031901T1-SC20190606111327.tar.gz
LC080330242019042001T1-SC20190606111203.tar.gz
LC080330242019052201T1-SC20190606111130.tar.gz
LC080330252019030301T2-SC20190606111021.tar.gz
LC080330252019031901T1-SC20190606120750.tar.gz
LC080340232019031001T1-SC20190606111056.tar.gz
LC080340232019041101T1-SC20190606111215.tar.gz
LC080340242019031001T1-SC20190606111201.tar.gz
LC080340242019041101T1-SC20190606111250.tar.gz
LC080340242019052901T1-SC20190606111331.tar.gz










Как видно из выходных данных, $ f что-то поднимает, так как есть правильное количество пустых строк.Однако я хочу распаковать каждый файл, который я не могу сделать.

TIA.

1 Ответ

3 голосов
/ 17 июня 2019

Вы должны удалить специальное значение $, чтобы передать его на удаленный хост как '$', иначе переменная будет раскрыта перед отправкой команды на удаленный хост.

Имейте в виду, что цикл for будет работать независимо от того, успешно ли был установлен компакт-диск.

ssh server1 << EOF
    cd /mnt/slowdata/ls8_processing
    ls
    for f in *.tar.gz
    do
        echo \$f
    done
EOF

Мой пример показывает разницу:

script.sh

#!/bin/bash

f=123

ssh -i .ssh/keyauth.pem root@server1 << EOF
for f in ./*.log 
do 
        echo "\$f"
        echo "$f" 
done 
EOF

Выход

[edvin@server2 ~]$ ./script.sh
./sepap-install.log
123
./sepfl-upgrade.log
123
./sep-install.log
123
./sepjlu-install.log
123
./sepui-install.log
123

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...