0

Как пройти минуты с полуночи до cli в одной строке?Как передать результат команды другой команде в одной строке?

Это работает:

echo $[ ((`date "+%s"` - 28800) % 86400)/60 ] 
// Correctly returns minutes since midnight in PST 

Но как я могу передать то же самое в другую команду?

Это не работает:

my_cli --json '{"minutes" : ' $[ ((`date \"+%s\"` - 28800) % 86400)/60 ] '}' 

Возвраты:

date: illegal time format 
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
     [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] 
ERROR: "my_cli json" was called with arguments ["-300", "}"] 
Usage: "my_cli json" 

Я также пробовал:

my_cli --json "{\"minutes\" : \$[ (($(date "+%s") - 28800) % 86400)/60 ] }" 

И я получил следующее сообщение об ошибке:

...unexpected token at '{"connection" : $[ ((1432139956 - 28800) % 86400)/60 ] }' (JSON::ParserError)` 
+2

Используя современный синтаксис оболочки поможет. Используйте '$ (...)' вместо backticks (тогда вам не нужно избегать внутренних двойных кавычек) и используйте '$ ((...))' вместо '$ [...]'. Посмотрите, сможете ли вы сделать эту работу. (Этот оригинал получает ошибку для меня о котировках в формате даты.) –

+0

Вы правы, у оригинала была ошибка. Не нужно было скрывать '' '. – Ryan

+0

Почему вы считаете, что второй пример нуждается в них? Вы пытаетесь подключить их в построенный json-скрипт? Если это так, поставьте их в одиночную кавычку или используйте' + \ "% s \ "', дата должна видеть '+' как первую вещь в аргументе. –

ответ

1

Если предположить, что количество минут должно быть целым числом, а не строка:

my_cli --json '{"minutes" : '"$(((($(date +%s) - 18000) % 86400)/60))"' }' 
1

Ниже приводятся минуты с полуночи для любой временной зоны, при условии, что «полночь» и «сейчас» может иметь различные смещения часового пояса:

$((($(date +%s) - $(date +%s -d$(date +%Y-%m-%d)))/60)) 

(я использовал форму $((...)) и $(...) вместо того, устаревшие и устаревшие $[...] и `...`.)

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

my_cli --json "{\"minutes\" : $((($(date +%s) - $(date +%s -d$(date +%Y-%m-%d)))/60))}" 
+0

Это выглядит многообещающим, за исключением того, что я получаю ошибку «дата: незаконный формат времени» в Mac OS X. (Для первой минуты с полуночной команды) – Ryan

+0

@Ryan: Да, mac os x имеет совершенно другое соглашение о соглашении. Я не думаю, что '-d' также работает на macosx, и вам нужно либо настроить формат даты, либо формат разбора (см. Флаг' -f'). У меня нет Mac, с которым можно играть. – rici

+0

@ Ryan: Если я правильно читаю manpage, это может работать: '$ (date +% s -f% Y-% m-% d $ (date +% Y-% m-% d))' (для части, следующей за знаком минус) – rici

Смежные вопросы