Как обнаружить, если мой сценарий оболочки пробегает канал?

Проверьте диспетчер конфигурации в Visual Studio. Убедитесь, что все проекты соответствуют платформе. Я хотел, чтобы платформа была x64, но мое основное приложение было настроено на AnyCPU. Установите это в x64, и это решило проблему.

239
задан codeforester 8 June 2018 в 02:21
поделиться

3 ответа

В чистой оболочке POSIX

if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi

возвращает "терминал", потому что вывод отправляется на ваш терминал, тогда как

(if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi) | cat

возвращает "не терминал", потому что вывод в скобках передается по конвейеру cat .


Флаг -t описывается на страницах руководства как

-t fd Истина, если файловый дескриптор fd открыт и относится к терминалу.

... где fd может быть одним из обычных назначений файлового дескриптора:

0:     stdin  
1:     stdout  
2:     stderr
360
ответ дан 23 November 2019 в 03:19
поделиться

Команда test (встроена в bash ), есть возможность проверить, является ли дескриптор файла терминалом.

if [ -t 1 ]; then
    # stdout is a tty
fi

См. « man test » или « man bash » и выполните поиск по запросу « - t "

27
ответ дан 23 November 2019 в 03:19
поделиться

Вы не указываете, какую оболочку используете, но в Bash вы можете сделать это:

#!/bin/bash

if [[ -t 1 ]]; then
    # stdout is a terminal
else
    # stdout is not a terminal
fi
12
ответ дан 23 November 2019 в 03:19
поделиться