Убедитесь, что в переменной есть определенное количество пробелов

Команда scp , которую вы пытаетесь запустить, не только неверна, но и не будет работать в любом случае, поскольку предполагает, что на вашем ноутбуке работает SSH-сервер.

Чтобы делать то, что вы хотите, есть гораздо более простой способ: используйте WinSCP на своем ноутбуке для подключения к удаленному кластеру (он работает аналогично PuTTY), а затем загрузите нужные файлы - в свой случае файлы из C: Users \ name \ Desktop \ AFU на вашем портативном компьютере в ~ / SVM в удаленном кластере.

1
15.02.2016, 23:28
2 ответа

Что касается рассматриваемой проблемы, я полагаю, что Дики уже на правильном пути.

Что касается альтернативы, возможно, используйте что-то вроде:

t="$(printf "%-16.16s" "$t")"

Если t всегда короче 16, в чем вы должны быть полностью уверены, вы можете сделать:

t="$(printf "%-16s" "$t")"

Обратите внимание, что это будет сбой при использовании символов, отличных от ASCII. Например, test:

$ x=123
$ x="$(printf "%-16.16s" "$x")"
$ printf "|%s|\n|1234567890123456|789012\n" "$x"
|123             |
|1234567890123456|789012

$ x=12345678901234567890123456
$ x="$(printf "%-16.16s" "$x")"
$ printf "|%s|\n|1234567890123456|789012\n" "$x"
|1234567890123456|
|1234567890123456|789012

$ x=sadasdæøåsasd
$ x="$(printf "%-16.16s" "$x")"
$ printf "|%s|\n|1234567890123456|789012\n" "$x"
|sadasdæøåsasd|                                     <<<--- ups!
|1234567890123456|789012

( Или, что еще интереснее:

printf "\e[41m%s\e[0m\n\e[41m1234567890123456\e[0m789\n" "$x"

)

2
27.01.2020, 23:26

Если ваша переменная начиналась слишком долго, она никогда не станет меньше. Это работает для меня (обрезать строку или дополнить ее):

if [[ ${#t} -gt 16 ]]
then
    t="${t:0:16}"
else
    until [[ ${#t} -ge 16 ]]
    do
        t="${t} "
    done
fi
1
27.01.2020, 23:26

Теги

Похожие вопросы