From fbf1049fd2857e864f71148290a34d5bcb729c69 Mon Sep 17 00:00:00 2001 From: brent s Date: Tue, 27 Apr 2021 04:37:17 -0400 Subject: [PATCH] adding equivalent of os.isatty --- terminal/funcs.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 terminal/funcs.go diff --git a/terminal/funcs.go b/terminal/funcs.go new file mode 100644 index 0000000..68b7119 --- /dev/null +++ b/terminal/funcs.go @@ -0,0 +1,40 @@ +/* + SysUtils - a library to assist with various system-related functions + Copyright (C) 2020 Brent Saner + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +package terminal + +import ( + "os" + "fmt" +) + +// IsShell returns true if the program is running inside an interactive shell (interactive invocation, sudo, etc.), and false if not (cron, ssh exec, pipe, etc.). +// Thanks to https://rosettacode.org/wiki/Check_output_device_is_a_terminal#Go +func IsShell() (interactive bool) { + + var stdoutStat os.FileInfo + + stdoutStat, _ = os.Stdout.Stat() + + if (stdoutStaf.Mode() & os.ModeCharDevice) != 0 { + interactive = True + } + + return +}