[[ -t 1 ]] 有什么作用?

3 shell-script test

据我了解,如果用户不是 root,则通过比较$EUID和 来运行下面的脚本0。然后,它用于[[ -t 1 ]]决定脚本是否在终端中运行。如果是,它将使用 sudo 提示用户输入密码。否则,它会引起 gksudo 这样做。

if (($EUID != 0)); then

    if [[ -t 1 ]]; then
        sudo "$0" "$@"
    else
        exec 1>output_file && rm output_file
        gksu "$0 $@"
    fi

    exit

fi
Run Code Online (Sandbox Code Playgroud)

什么是[[ -t 1 ]]比较/评估?

hee*_*ayl 8

[[ -t 1 ]]如果文件描述符 1 (STDOUT) 在终端上打开,则测试返回 true,否则返回 false。

help testbash

-t FD          True if FD is opened on a terminal.
Run Code Online (Sandbox Code Playgroud)


mik*_*erv 5

[ -t 1 ]
Run Code Online (Sandbox Code Playgroud)

...或者...

test -t 1
Run Code Online (Sandbox Code Playgroud)

...如果文件描述符 1 - stdout - 是 tty,则返回 true,否则返回 false。也是一样的

[[ -t 1 ]]
Run Code Online (Sandbox Code Playgroud)

...在许多贝壳中。