smbclient копия файла с одинарной кавычкой

Как я могу использовать одинарные кавычки в smbclient "положить" команду?

Например:

smbclient -c 'put "/mydir/video.avi" "\Music\Guns N' Roses\video.avi"'

'In' Guns N' Roses"генерирует ошибку, но я не могу использовать"Guns N\' Roses", потому что изменит путь.

1 ответ

Ваша оболочка не позволяет использовать экранированные одинарные кавычки внутри строки в одинарных кавычках. Прочтите раздел "Цитирование" в man bash (при условии, что ваша оболочка bash).

Вам нужно экранировать внутренние одинарные кавычки вне строки в одинарных кавычках:

smbclient -c 'put "/mydir/video.avi" "\Music\Guns N'\'' Roses\video.avi"'

Или, если вы предпочитаете:

smbclient -c 'put "/mydir/video.avi" "\Music\Guns N'"'"' Roses\video.avi"'

Или, альтернативно, вы можете поместить вещи в переменные, использовать форматирование и т. Д. Очевидно, я не проверял это в вашей среде, но мне кажется целесообразным следующее:

$ source="/mydir/video.avi"
$ target="\Music\Guns N' Roses\video.avi"
$ cmd='put "$s" "$s"'
$ smbclient -c "$(printf "$cmd" "$source" "$target")"
Другие вопросы по тегам