据我了解,如果用户不是 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 ]]比较/评估?
[[ -t 1 ]]如果文件描述符 1 (STDOUT) 在终端上打开,则测试返回 true,否则返回 false。
从help test在bash:
-t FD True if FD is opened on a terminal.
Run Code Online (Sandbox Code Playgroud)
[ -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)
...在许多贝壳中。