Как пройти минуты с полуночи до 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)`
Используя современный синтаксис оболочки поможет. Используйте '$ (...)' вместо backticks (тогда вам не нужно избегать внутренних двойных кавычек) и используйте '$ ((...))' вместо '$ [...]'. Посмотрите, сможете ли вы сделать эту работу. (Этот оригинал получает ошибку для меня о котировках в формате даты.) –
Вы правы, у оригинала была ошибка. Не нужно было скрывать '' '. – Ryan
Почему вы считаете, что второй пример нуждается в них? Вы пытаетесь подключить их в построенный json-скрипт? Если это так, поставьте их в одиночную кавычку или используйте' + \ "% s \ "', дата должна видеть '+' как первую вещь в аргументе. –