gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:09:24 25 4
gpt4 key购买 nike

browser由 defunkt github 用户提供的要点以这个 shell 表达式开头

if [ -t 0 ]; then ...

这行代码是什么意思?

更新:你能不能解释一下为什么我在做其他事情之前需要这个检查?

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

最佳答案

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

  • 所以说

    if STDIN is a terminal then ...

    动机

    我必须阅读整个脚本才能确定,但​​通常是因为脚本想要做一些视觉上光滑的事情,比如清除屏幕或交互提示。如果您正在阅读管道,那么这样做是没有意义的。

    细节

    好的,让我们检查整个脚本:
    # 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 的参数。如果它不是终端,则它会尝试将输入显示为 html。

    关于shell - 无法理解 shell 脚本中的 [-t 0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949079/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com