shell - 外壳运算符“||” 没有按预期工作?
问题描述
我正在尝试使用以下命令从 HTTP 标头获取文件时间。
curl -sLI http://sgp-ping.vultr.com/vultr.com.100MB.bin | grep -i '^Last-Modified' | cut -c16- | date -f- '+%F %T'
正常情况下可以返回查询结果。
如果由于网络问题导致查询失败,则返回null。
我想在查询失败时返回当前系统时间。所以我使用了shell操作符“||”,用法如下。
curl -sLI http://sgp-ping.vultr.com/xxx.bin | grep -i '^Last-Modified' | cut -c16- | date -f- '+%F %T' || date '+%F %T'
但它并没有按预期工作,它有什么问题?
任何帮助,在此先感谢!
解决方案
如果你正在编写一个脚本,你可以通过$?
只需要允许它来处理它。
例如
#!/bin/bash
doTheCurl() {
curl -v -sLI -o /dev/null "$1" 2>&1 | grep -i '< Last-Modified:'
[ $? -ne 0 ] && date '+%F %T'
}
doTheCurl "http://sgp-ping.vultr.com/vultr.com.100MB.bin"
doTheCurl "http://non-sgp-ping.vultra.com/xxx.bin"
给出了这个[我忽略了提取/格式化 - 但你可以看到结果是不同的,因为它们来自不同的路径。]。
< Last-Modified: Wed, 28 Oct 2020 18:06:00 GMT
2021-03-12 16:24:19
第一个失败是因为 grep 不匹配任何东西 - 所以它给出了日期。你可以做任何你喜欢的事情 - pipe thru sed 或之后的任何事情。
推荐阅读
- mongodb - 如何比较不同 BSON 类型的两个值?
- javascript - 动态创建的 html 链接不起作用
- flutter - 创建稍小于屏幕宽度的 RaisedButton
- angular - 如何控制取消订阅 Ionic In app Purchase
- windows - 在函数外使用变量
- javascript - 为什么 query-ui 可排序功能无法正常工作?
- android-studio - 如何在 Linux Mnt 19.3“Tricia”上执行 .sh 文件
- reactjs - 使用条件监听器响应 UseEffect 和 Unsubscribe 承诺!(优化 Firestore 快照)
- node.js - GCP 中的问题:Google Cloud Platform 中的 getaddrinfo ENOTFOUND 问题
- python - 在另一个循环运行时更新 tkinter 标签