2016-10-30 2 views
0

Я пишу программу, которая ускоряет работу git push. Вот что нужно сделать:Проверьте, не прописана ли программа

printf("[github-username]\n[github-password]"); 

Я бы затем использовать его так:

git-autologin | git push 

Но я не хочу, чтобы какой-то шанс кого-то просто набрав git-autologin или git-autologin > file.txt и быть возможность видеть мое имя пользователя и пароль. Я знаю, что это звучит глупо, потому что любой может все еще автоматизировать команды git, но маловероятно, что любой ненадежный пользователь когда-либо попадет в мою систему.

Мой вопрос: Как я могу определить, записывает ли стандартный вывод файл/терминал или если он подключен к сети?
Редактировать: Труба git push была просто идеей, а не единственной причиной, о которой я прошу.
Редактировать: Есть ли способ определить PID или более подробную информацию о процессе, к которому он подключен?

+0

BTW Если тег 'git' должен быть удален, не стесняйтесь удалять его или комментировать. –

+3

Для этого конкретного решения вы можете прочитать [git credentials helpers] (https://git-scm.com/docs/gitcredentials). На самом деле вам лучше использовать ключ ssh для аутентификации, а не имя пользователя/пароль. – larsks

+0

@larsks Спасибо, я посмотрю, но это не единственная причина, о которой я прошу, только самый объяснимый. –

ответ

2

Вы можете обнаружить, когда стандартный вывод является терминал с помощью (на Linux & POSIX!) Функции isatty(3), вероятно, isatty(STDOUT_FILENO)

Таким образом, можно предположить, что если isatty(STDOUT_FILENO) ложно, то стандартный вывод будут перенаправлены или переданы по каналам.

В качестве альтернативы, используйте fstat(2) в fstat(STDOUT_FILENO, &stdoutstat);

Но вы должны настроить ssh правильно (с учетными данными, STFW для любой SSH учебник!) В вашей системе, чтобы избежать git спрашивая пароля.

Смежные вопросы