Я передаю имя файла scp
в качестве аргумента, чтобы записать файл с определенным именем.Escaping quotes in bash
Это часть псевдонима в .bash_profile, поэтому я пытаюсь автоматизировать включение текущей даты в имя записываемого файла.
На данный момент у меня есть это:
alias getlog='scp [email protected]:public/censored/current/log/exceptions.log "exceptions_$(date +\"%d_%b_%Y\").log"'
Давайте сосредоточимся на второй аргумент команды scp
. Он записывает имя файла в этом формате:
exceptions_ «20_Jan_2015» .log
Во-первых, котировки включены в название, которое я не хочу. И я также предпочитаю пробелы в имени, а не подчеркиванием, так что это выглядит следующим образом:
исключения 20 Jan 2015.log
Что мне нужно знать о строках и бежать в Баш, чтобы сделай это?
Если вам не нужны кавычки в имени файла, почему вы включили их в формат даты? Одна вещь, которую вам нужно знать об экранировании, заключается в том, что экранированная цитата - это еще один символ. И если вы хотите заменить символы подчеркивания пробелами, просто сделайте это, но либо обратную косую черту - избежите пробелов (так, чтобы они были просто другим символом), либо указали формат с неэксклюзивными кавычками (так что они действительно кавычки). – rici
Для хорошего углубленного обсуждения цитирования оболочки я бы предложил http://mywiki.wooledge.org/Quotes - это много контента, но тогда это большая и важная тема. –
... Передача содержимого через ssh или scp на самом деле сложнее, чем котировка, в общем случае - это влияние безопасности, если что-либо, что предназначено для обработки данных, может интерпретироваться кодом удаленной оболочкой, выполняющей разложения (в scp case) или выполнение команды, заданной в качестве аргумента (в случае ssh). По этой причине всеобъемлющий ответ на этот вопрос сложнее, чем просто исправить вашу непосредственную проблему, не имея в виду, что вы создаете данные для использования с scp. –