Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何将命令的结果传递给一行中的另一个命令?_Bash_Shell_Command Line_Concatenation_Command Line Interface - Fatal编程技术网

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

Bash 如何将命令的结果传递给一行中的另一个命令?,bash,shell,command-line,concatenation,command-line-interface,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: ill

如何在一行中将午夜后的分钟数传递给
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)`

以下内容提供了任何时区自午夜起的分钟数,但有一个限制条件,即“午夜”和“现在”可能具有不同的时区偏移量:

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

使用现代shell语法在这里会有所帮助。使用
$(…)
而不是反勾号(这样就不需要转义内部双引号),并使用
$(…)
而不是
$[…]
。看看你能不能做到。(那份原件在日期格式的引号上有一个错误。)你说得对,原件有一个错误。不需要逃避
.BTW,一般来说,使用字符串连接来构建JSON并不是一个很好的实践,尽管在这里是安全的,其中被替换的变量永远都是数字;当输入类型的约束不如此好时,最好使用jq、jsawk或类似的工具。@Ryan,我删除了它,因为rici在正确的轨道上,所以我的是重复的。也就是说,我可以继续测试并重新添加它;麦克波特公司。将安装
gdate
(我认为这是
coreutils
)的一部分。这看起来很有希望,除非我在Mac OS X上收到
日期:非法时间格式
错误。(从午夜命令开始的第一分钟)@Ryan:是的,Mac OS X有一个完全不同的参数约定。我认为
-d
在macosx上也不起作用,您需要调整日期格式或解析格式(请参见
-f
标志)。我手边没有mac电脑。@Ryan:如果我正确阅读手册页,这可能会起作用:
$(日期+%s-f%Y-%m-%d$(日期+%Y-%m-%d))
(对于减号后面的部分)