检查 Swift 程序是否正在输出到终端
Check if Swift program is outputting to terminal
如何从我的 Swift 脚本中检查我是否正在输出到终端?
例如,在 bash 或 zsh 脚本中,这可以通过 -t 1
条件表达式来完成,以检查文件描述符 1 (stdout) 是否打开并与终端设备相关联:
if [[ -t 1 ]]; then
echo "\e[31m"HELLO"\e[0m" # colorize output
else
echo hello
fi
注意当脚本在交互式 shell 中 运行 而不是通过管道传输到另一个程序时格式的差异:
./script
↪︎ HELLO
./script | tee
↪︎ hello
Swift中的等价物是什么?
#!/usr/bin/env swift
if ❓ {
print("\u{001B}[31m" + "HELLO" + "\u{001B}[0m")
} else {
print("hello")
}
isatty
函数 returns 1
如果给定的文件描述符与终端关联。像许多 C 库函数一样,isatty
可以通过 Darwin 模块从 Swift 调用:
import Darwin
if isatty(STDOUT_FILENO) == 1 {
print("\u{001B}[31m" + "HELLO" + "\u{001B}[0m")
} else {
print("hello")
}
要在 macOS 和 Linux 上实现此 运行,请将 import Darwin
替换为
#if os(Linux)
import Glibc
#else
import Darwin
#endif
如何从我的 Swift 脚本中检查我是否正在输出到终端?
例如,在 bash 或 zsh 脚本中,这可以通过 -t 1
条件表达式来完成,以检查文件描述符 1 (stdout) 是否打开并与终端设备相关联:
if [[ -t 1 ]]; then
echo "\e[31m"HELLO"\e[0m" # colorize output
else
echo hello
fi
注意当脚本在交互式 shell 中 运行 而不是通过管道传输到另一个程序时格式的差异:
./script
↪︎ HELLO
./script | tee
↪︎ hello
Swift中的等价物是什么?
#!/usr/bin/env swift
if ❓ {
print("\u{001B}[31m" + "HELLO" + "\u{001B}[0m")
} else {
print("hello")
}
isatty
函数 returns 1
如果给定的文件描述符与终端关联。像许多 C 库函数一样,isatty
可以通过 Darwin 模块从 Swift 调用:
import Darwin
if isatty(STDOUT_FILENO) == 1 {
print("\u{001B}[31m" + "HELLO" + "\u{001B}[0m")
} else {
print("hello")
}
要在 macOS 和 Linux 上实现此 运行,请将 import Darwin
替换为
#if os(Linux)
import Glibc
#else
import Darwin
#endif