Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   [решено] bash скрипт установки времени на удаленной машине по ssh (http://forum.oszone.net/showthread.php?t=343929)

lxa85 03-02-2020 23:45 2908159

bash скрипт установки времени на удаленной машине по ssh
 
Здравствуйте.
Почти все вынесено в название.
Прошу объяснить, как работает однострочни
Он устанавливает время на удаленной машине, таким же как на локальной.
Код:

ssh user@server date -s @`( date -u +"%s" )`
До вызова команды date мне все понятно, а аргументы и формирование аргументов - меня ставят в ступор.
Как мне трактовать собачку? @
обратные кавычки ` ` возвращают результат работы программы.
И в них заключается вызов но уже в круглых скобках ??
Как ее читать ??
Как строить цепочку рассуждения ??

Взято с
https://www.commandlinefu.com/comman...erver-over-ssh

Jula0071 04-02-2020 12:50 2908198

Цитата:

Цитата lxa85
Как мне трактовать собачку? @ »

Собачку надо трактовать как собачку. Строковый символ.
Цитата:

Цитата lxa85
И в них заключается вызов но уже в круглых скобках ?? »

На самом деле все нижеперечисленные конструкции равнозначны:
Код:

`( date -u +"%s" )`
` date -u +"%s" `
$( date -u +"%s" )

Круглые скобки в баше это группа команд. Могу пердположить, автор предложил свой вариант для максимальной совместимости, например если на удалённом сервере шелл не bash, а что-то другое.
Цитата:

Цитата lxa85
Как ее читать ?? »

Команда date -u +"%s" возвращает строку - время в зоне UTC в формате UNIX epoch, т.е. секунды, прошедшие с 00:00 1 января 1970. Например, 1580808623. Спереди к этой строке приписывается символ @, получается строка @1580808623, которая будучи добавлена к 'date -s ' даёт в итоге 'date -s @1580808623' что и выполняется на удалённом сервере. Итог будет типа
Код:

date: cannot set date: Operation not permitted
Tue Feb  4 11:28:30 EET 2020

потому что вы потеряли sudo.

RoseHill 04-02-2020 13:03 2908200

Интерпретаторы командной строки на разных системах разные. Синтаксис команд, да и наборы допустимых команд тоже разные. В этом примере кто-то не просто получил результат исполнения команды
Код:

date -u +"%s"
, в которой, как можно заметить, получение секунд (%s) c так называемой "начала эры" взял в кавычки, что в принципе не обязательно для нынешней реализации bash и непосредственно синтаксиса date, но, вероятно, недопустимо без кавычек именно в том интерпретаторе, который был у автора. Автор этой строки ещё и взял в скобки команду получения даты в виде секунд с "начала эры". Опять же, для часто используемых в настоящее время интепретаторов лишнее, но никому, кроме автора, неизвестно, что у него есть в наличии, какой интерпретатор, в какой именно операционной системе работает, и каковы у него требования к синтаксису.

К сожалению, это такая повсеместная небрежность отвечающих на вопросы, советчиков. Никогда не уточняют в чём именно и для каких окружений ответ или совет. Почему? Да потому что вопрошающие тоже очень редко уточняют эти немаловажные факторы. В результате получается что-то вроде следующего события.
Приходит студент в институт, где лектор рассказывает обобщение формул конечных приращений Лагранжа, и спрашивает лектора: "А почему вы символ возведения в квадрат пишите хвостиком вниз, будто цифру пять перевернули? Мне объясняли как пишется цифра пять, а это у вас какой-то перевёрнутый символ. Почему?" Ну, что тут может ответить лектор...

Тоже самое и к вопросу о "sudo". )) Надо это или не надо - всё зависит совершенно от других факторов, не относящихся ни к интерпретаторам, ни к синтаксису, а к назначенным разрешениям для пользователя.

Коммерческое эт (@) всего лишь означает, что для используемой у автора среды исполнения полученный результат количества секунд надо обязательно объявлять строкой. Количество секунд - это вообще-то число, а чтобы в используемом интерпретаторе и среде исполнения команды date, при назначении даты не произошло чего-нибудь нехорошего, у автора надо передать этой команде переменную именно строкой. ))

lxa85 04-02-2020 22:34 2908259

RoseHill, Jula0071, спасибо. Вчера нашел это решение будучи сильно уставшим. Сегодня "поиграл фрагментарно с формулой", да, отдает результат "от начала эры". И поэтому мы получаем нормально передаваемое значение, не зависимое от языка, и кодировок, и избавляет от необходимости решать задчу, когда date дает "Пон Фев" а date -s понимает только Feb. + UTF -> KOI8-R
Про @ я было подумал как про спец символ.
Да, sudo добавлено, спасибо.

Jula0071 04-02-2020 23:10 2908267

Цитата:

Цитата lxa85
не зависимое от языка, и кодировок »

А также от часового пояса (таймзоны).


Время: 13:32.

Время: 13:32.
© OSzone.net 2001-