Плохие новости. С точки зрения командной строки Unix эти два вызова вашей программы идентичны.
Unix не может их легко отличить. То, что вы просите, не очень разумно, и вам нужно подумать о другом способе использования вашей программы.
В случае, когда он не находится в конвейере, что он должен читать, если не читает stdin?
Должен ли он запускать графический интерфейс? Если это так, вы можете использовать опцию "-i" (--interactive), чтобы указать, что вам нужен графический интерфейс, а не чтение стандартного ввода.
Иногда вы можете отличить каналы от консоли, поскольку консольное устройство - "/ dev / tty", но это не переносимо.