Ошибка SCP для скрипта bash с пробелами в исходном пути

Вы написали

I further open two terminal sessions for each of the users respectively

А потом в комментарии вы уточнили, что после открытия нового окна терминала

I then use "su - username" to log in to the other user

При открытии окна терминала создается запись в utmp. Команда suэтого не делает. Таким образом, каждое открытое вами окно будет зарегистрировано под вашей исходной учетной записью пользователя, которая вошла в систему.

0
09.01.2020, 00:46
2 ответа

Ваш шаблон побега не совсем правильный. Вместо этого используйте это, которое предваряет каждое появление пробела одной обратной косой чертой:

ESC_DB_ARC_FILENAME="${DB_ARC_FILENAME// /\\ }"

Тестовый сценарий (в$HOME):

file='the date.txt'
date > "$file"

scp -vp localhost:"$file" td; ls -l td; rm -f td             # Fails
scp -vp localhost:"${file// /\\ }" td; ls -l td; rm -f td    # Succeeds

Понятно. Это сообщение об ошибке выдает:

: No such file or directoryes/SONIC BOATS LTD./database-1.11-2019-12-30-09-40.zip

Вы используете исходный файл данных, созданный на компьютере с Windows. Завершающий CR рассматривается как часть имени файла, и, конечно же, в исходном файле такого символа нет.

1
28.01.2020, 02:38

Я столкнулся с похожими проблемами при попытке скопировать файлы с удаленных путей, содержащих пробелы, с помощью scpиз сценария Bash.

Вот решения, которые я придумал:

Использование двойных -кавычек + опция-T:

scp -T user@host:"'<path-with-spaces>'" <destination>
scp -T user@host:'"<path-with-spaces>"' <destination>
scp -T user@host:"\"<path-with-spaces>\"" <destination>

Обратите внимание, :без опции -T, эти команды приведут к protocol error: filename does not match request. Причина этого подробно обсуждается здесь .

Путь выхода с помощью printf:

source="<path-with-spaces>"
printf -v source "%q" "${source}"
scp user@host:"${source}" <destination>

Обратите внимание, :это прекрасно работает без опции -T, но только для одного файла. Для нескольких файлов снова требуется опция -T(та же ошибка, что и выше ).

1
14.10.2021, 19:05

Теги

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