Сохранить присутствие последней новой строки при назначении переменной

Вы можете использовать инструмент командной строки Linux / Unix с открытым исходным кодомgdrive.

Для установки:

  1. Загрузите двоичный файл. Выберите тот, который соответствует вашей архитектуре, например gdrive-linux-x64.

  2. Скопируйте его на свой путь.

    sudo cp gdrive-linux-x64 /usr/local/bin/gdrive;
    sudo chmod a+x /usr/local/bin/gdrive;
    

Чтобы использовать:

  1. Определите идентификатор папки Google Диска. Для этого перейдите в папку для загрузки с помощью веб-клиента drive.google.com. Теперь посмотрите на URL-адрес в адресной строке браузера, он покажет что-то вроде https://drive.google.com/drive/folders/0B7_OwkDsUIgFWXA1B2FPQfV5S8H. Получите строку после последнего /и скопируйте ее в буфер обмена. Это идентификатор папки.

  2. Загрузите папку. Конечно, вместо этого используйте ID вашей папки в следующей команде.

    gdrive download --recursive 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
    

При первом использовании инструмент должен получить права доступа к API Google Диска. Для этого он покажет вам ссылку, которую вы должны посетить в браузере, а затем вы получите код подтверждения, который нужно скопировать и вставить обратно в инструмент. После этого загрузка начнется автоматически. Индикатора прогресса нет, но вы можете наблюдать за прогрессом в файловом менеджере или втором терминале.

Источник:Комментарий Тоби к вопросу stackoverflow.com. Ответ адаптирован из моего аналогичного ответа .

0
15.03.2019, 16:36
1 ответ

На самом деле подстановка команд удаляет завершающие символы новой строки, а не добавляет их. Но если вы используете echoдля печати переменной позже, она добавляет ее по умолчанию.

Добавление завершающего символа xили чего-то подобного действительно несколько хакерское, но это, вероятно, самый простой способ, и он работает во всех оболочках. Вы можете сделать его немного короче, используя echo xвместо printf '%s' 'x'.

Поскольку вы упомянули read, вы могли бы использовать что-то подобное (и в Bash ):

IFS= read -rd '' var < <(newlinetest with)

Я оставлю вам решать, красивее ли это, чем это:

var=$(newlinetest with; echo x)
var=${var%x}

Хотя существует потенциальная разница в производительности между ними. В первом подстановка процесса создает канал, который readсчитывает из по одному байту за раз , чтобы избежать переполнения разделителя (Здесь это не имеет значения, но оболочка не знает, что. )Подстановка команд будет считываться большими блоками и, следовательно, будет выполняться быстрее при больших выходных данных.

2
28.01.2020, 02:30

Теги

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