无法理解 shell 脚本内的 [-t 0]

2024-06-23

这个浏览器要点 https://gist.github.com/318247by defunkt github 用户以此 shell 表达式开始

if [ -t 0 ]; then ...

这行代码的含义是什么?

UPDATE:您还能解释一下为什么我在做其他事情之前需要进行此检查吗?

为了完整起见,这里是整个小脚本(它允许将文本通过管道传输到默认浏览器):

 if [ -t 0 ]; then
  if [ -n "$1" ]; then  
    open $1
  else
    cat <<usage
Usage: browser
       pipe html to a browser

$ echo '<h1>hi mom!</h1>' | browser
$ ron -5 man/rip.5.ron | browser
usage

fi
else
  f="/tmp/browser.$RANDOM.html"
  cat /dev/stdin > $f
  open $f
fi

  • [ and ]调用test
  • -t使得test测试文件描述符以查看它是否是终端
  • 0是 STDIN 的文件描述符。

所以说

if STDIN is a terminal then ...

动机

我必须阅读整个脚本才能确定,但​​通常是因为脚本想要执行一些视觉上流畅的操作,例如清除屏幕或交互式提示。如果你正在读取管道,那么这样做是没有意义的。

Detail

好的,让我们检查一下整个脚本:

# If this has a terminal for STDIN
if [ -t 0 ]; then
  # then if argument 1 is not empty
  if [ -n "$1" ]; then  
    # then open whatever is named by the argument
    open $1
  else
    # otherwise send the usage message to STDOUT
    cat <<usage
Usage: browser
       pipe html to a browser

$ echo '<h1>hi mom!</h1>' | browser
$ ron -5 man/rip.5.ron | browser
usage
#That's the end of the usage message; the '<<usage'
#makes this a "here" document.
fi  # end if -n $1
else
  # This is NOT a terminal now
  # create a file in /tmp with the name
  # "browser."<some random number>".html"
  f="/tmp/browser.$RANDOM.html"
  # copy the contents of whatever IS on stdin to that file
  cat /dev/stdin > $f
  # open that file.
  open $f
fi

这是检查你是否在终端上;如果是这样,它会查找带有文件名或 URL 的参数。如果它isn't终端,然后它尝试将输入显示为 html。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法理解 shell 脚本内的 [-t 0] 的相关文章

  • 如何使用 docker ENTRYPOINT 与 shell 脚本文件组合参数

    我编写 shell 脚本文件并将其与 docker ENTRYPOINT 一起使用 但是当我运行 docker image 时 由于入口点代码行 它只是停止而没有任何错误日志 我的 Dockerfile FROM ubuntu 16 04
  • 检查帐号是否为数字时出现语法错误

    if account nr 0 9 from account nr 0 9 这是为了检查帐号是否为数字 我收到语法错误 这个问题的早期版本缺少之间的空格if and 实际代码具有所需的空间 它显示以下错误消息 syntax error ac
  • 如何正确使用fork、exec、wait

    我正在编写的 shell 需要执行用户提供给它的程序 这是我的程序的非常简短的简化版本 int main pid t pid getpid this is the parents pid char user input NULL size
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • 检查 Git 中是否需要 pull

    如何检查远程存储库是否已更改并且需要拉取 现在我使用这个简单的脚本 git pull dry run grep q v Already up to date changed 1 但它比较重 有没有更好的办法 理想的解决方案是检查所有远程分支
  • SVN 提交后挂钩在提交后不会运行

    我的服务器上设置了 SVN 存储库 并且遇到提交后问题 我在 iMac 上使用 SmartSVN 作为客户端 我通过 SmartSVN 的 ssh svn 连接 我能够成功连接到 SVN 并对其进行更改 但从 SVN 客户端提交后 我的提交
  • Python 3.6 shell 中可点击的 html 链接?

    比如说 我有一个充满 html 链接的列表 看起来像这样 https www nytimes com 2017 05 19 realestate they can afford to buy but they would rather re
  • 使用.sh脚本设置环境变量

    如何编写 sh 脚本以在 Ubuntu 14 上全局设置环境变量 i e bin sh sets this in to master etc environment export DB HOST 123 我知道我可以运行这个脚本 它只会将其
  • 如何使用 awk 将 mac addr 转换为 int?

    Input 192 168 0 1 aa bb cc 00 11 22 192 168 0 1 aa 00 bb 11 cc 22 192 168 10 11 2a bb cc 20 11 22 192 168 10 11 aa 02 bb
  • 使用 sed 删除带有方括号和引号的模式

    如何使用 sed 删除具有此模式的行 resourceNames I tried sed i resourceNames d sa yaml 文件的一部分看起来像这样 apiGroups resources secrets resource
  • 如何在 grep 中每个文件匹配一次?

    是否有任何 grep 选项可以让我控制匹配总数 但在每个文件的第一个匹配处停止 Example 如果我这样做grep ri include coffee re 我明白了 app coffee express require express
  • 无法理解 shell 脚本内的 [-t 0]

    这个浏览器要点 https gist github com 318247by defunkt github 用户以此 shell 表达式开始 if t 0 then 这行代码的含义是什么 UPDATE 您还能解释一下为什么我在做其他事情之前
  • Linux Bash - 日期格式

    我的日期格式是 yyyy mm dd hh mm ss 如何检查我的输入 它应该是这样的 bin bash read p Date format yy mm dd HH MM SS input check date Y m d H M S
  • 如何使用 HP-UX shell 脚本将简单的文本文件作为附件发送?

    我需要在 HP UX 中使用 shell 脚本发送一封带有文本文件作为附件的电子邮件 我没有安装mutt 我正在使用以下命令 但它在电子邮件正文中发送文件内容 我希望将其作为附件 mailx s Report email protected
  • 具有此处文档重定向的 Makefile 配方

    有谁知道如何在菜谱上使用此处文档重定向 test sh lt
  • $@ 中 args 的 bash 参数大小写

    我有一个带有一长串可选参数的脚本 有些具有相关的值 Such as script first 2012 12 25 last 2012 12 26 copy remove script first 2012 12 25 因此有以下案例陈述
  • shell脚本响应按键

    我有一个 shell 脚本 本质上是这样的 while true do read r input if input a then echo hello world fi done 这一切都很好 但我刚刚意识到在这种情况下必须按 ENTER
  • Windows 卷曲批处理文件

    我想使用 Windows 批处理文件进行 mailgun 卷曲调用 由于Windows shell不支持多行 如何在Windows批处理文件中执行以下curl函数 curl s user api key xxxxxxxxxx https a
  • 连接MySQL服务器的Shell脚本

    我有大约 20 个不同的 MySQL 实例 我想轻松连接到它们 而不必每次都输入完整的地址 用户名和超长的密码 我可以做什么来编写此过程的脚本 这样我所要做的就是为每个实例运行一个 sh 脚本 到目前为止我所拥有的 保存为 instance

随机推荐

  • Mathematica 8 中具有等式约束的函数最小化

    在 Mathematica 8 中使用具有简单等式的约束时 最小化不起作用 例如 FindMinimum x 2 y 2 y 1 x y 在 Mathematica 6 中工作正常 但在版本 8 中出现错误 其他人可以确认 或解释 这一点吗
  • 在地图元素上使用 for_each

    我有一个映射 我想在其中对每个数据类型对象成员函数执行调用 我还知道如何在任何序列上执行此操作 但是是否可以在关联容器上执行此操作 我能找到的最接近的答案是 Boost Bind 访问 std for each 中的 std map 元素
  • 如何发送包含 Blob 的 http 多部分 POST 请求?

    我正在使用 multipart XMLHttpRequest 在 Google Drive 帐户上上传文件 使用 google 文档中描述的语法 https developers google com drive web manage up
  • JavaFX 中画布的最大尺寸

    有谁知道JavaFX中画布的最大尺寸 从一些测试来看 它似乎是 8192 与 IE 相同 在我看来 这很奇怪 或许 可以修改吗 这可能取决于您的显卡的最大纹理大小 因为我相信 使用最常见的硬件加速渲染管道 画布最终将表示为纹理 我不太清楚
  • 找不到 gcloud 命令 - 安装 Google Cloud SDK

    我正在尝试在终端中使用以下命令在 Mac 上安装 Google Cloud SDK curl https sdk cloud google com bash 它工作得很好 但是当我进入下一步时 gcloud init 我得到以下内容 bas
  • AngularJS RequireJS Browserify 和 Javascript 模块/全局范围噩梦 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我最近在 CommonJS 与 AMD 的战斗中进行了一些挖掘 这是我的发现 顺便说一句 我不是在这里说教 而是分享我的想法以获得一些建设性的见
  • Windows Azure 使用 A6 vmsize 部署云服务

    在我的云服务中 我有一个 Web 角色和辅助角色 我将 Web 角色 VM 大小更改为medium to A6 当我尝试部署到 Windows Azure 时 收到以下错误消息 s 似乎提示我错误 由于部署请求限制 无法配置此部署所需的 V
  • 在 64 位 RHEL 上安装 32 位库 (glibc),而不使用 yum

    我试图让 32 位应用程序在 64 位 RHEL 6 1 上运行 但该计算机无法访问互联网 有没有办法在 64 位 RHEL 上安装 32 位 glibc 而不使用 yum 即仅使用 RPM 安装 我从 RHEL 6 1 ISO 中获取了
  • Java 8 Eclipse 未设置根错误

    最近 我为 JavaFX 应用程序安装了 Java 8 build 124 并且开始收到以下错误 javafx fxml LoadException Root hasn t been set Use method setRoot befor
  • 应用商店拒绝在 iOs 10 上支持 IPV6 网络的应用

    我收到了来自苹果的应用程序拒绝邮件 如下所示 我们在通过连接到 IPv6 网络的 Wi Fi 运行 iOS 10 0 2 的 iPad 和 iPhone 上进行审核时 发现您的应用程序存在一个或多个错误 具体来说 应用程序在启动时仍保留在启
  • 原始 SQL 是用汇编语言还是 C 语言编写的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 对于从开始到结束的循环,结束变量在循环中改变

    从测试数据开始 并运行代码 Sub TestLoop Dim LastRow As Long CurRow As Long LastRow Range A Rows Count End xlUp Row For CurRow 1 To La
  • 使用 malloc 循环来保证 malloc 的结果是否不好?

    像这样分配内存是不好的做法吗 FOO foo while foo malloc sizeof FOO 我不知道什么是不好的做法 但这并不常见 malloc 故障通常表明您的程序不太可能恢复的主要系统问题 如果您的系统不同 您的示例很可能很实
  • 凿子“Enum(UInt(), 5)”失败

    当我尝试使用 Chisel 构建 FSM 时 我使用了 Enum 如 Chisel 教程所述 然而 我遇到了这样的错误 my code val sIdle s1 s2 s3 s4 Nil Enum UInt 5 但是 当我执行时sbt ru
  • 使用 CSS 剪辑路径仅影响 webkit 浏览器中的第一个对象?

    我正在尝试使用 CSS 剪辑路径属性将 SVG 剪辑路径应用到页面中的某些元素 例如 HTML 请注意 clipPathUnits objectBoundingBox 允许以包含元素大小的分数表示圆 setTimeout function
  • ASP.NET MVC 6 Beta 8 和 Windows 身份验证

    升级到 Beta 8 后 使用 Windows 身份验证进行调试在 IIS Express 中不起作用 我收到错误 尝试确定托管您的应用程序的 DNX 进程的进程 ID 时发生错误 重现步骤 创建一个新项目并选择空 Web 模板 在项目设置
  • ASCII 表 - 负值[重复]

    这个问题在这里已经有答案了 可能的重复 负 ASCII 值 https stackoverflow com questions 4690415 negative ascii value int main char b 8 3 printf
  • Sitecore:在页面编辑器模式下检测用户

    我可以知道如何使用代码检测用户是否处于页面编辑器模式吗 这是因为 我有一个组件 当用户从页面编辑器浏览时 它将在 master index 文件夹而不是 web index 文件夹中搜索 请检查 if Sitecore Context Pa
  • Bootstrap 单选按钮:在提交表单时获取所选值

    我有下一个 Bootstrap 单选按钮 div class btn group div
  • 无法理解 shell 脚本内的 [-t 0]

    这个浏览器要点 https gist github com 318247by defunkt github 用户以此 shell 表达式开始 if t 0 then 这行代码的含义是什么 UPDATE 您还能解释一下为什么我在做其他事情之前