如何在一行中将一个命令的结果传递给另一个命令?

How can I pass the result of a command to another command in one line?

如何将自午夜以来的分钟数传递到一行中的 cli

这个有效:

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

但是我怎样才能将它传递给另一个命令呢?

这行不通:

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

Returns:

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)`

以下提供了任何时区自午夜以来的分钟数,条件是 "midnight" 和 "now" 可能具有不同的时区偏移量:

$(( ($(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 ))}"

假设分钟数应该是整数而不是字符串:

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