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

时间:2015-05-20 16:22:39

标签: bash shell command-line concatenation command-line-interface

如何从午夜将分钟传递到一行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 个答案:

答案 0 :(得分: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 ))}"

答案 1 :(得分:1)

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

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