Shell: Do not assume that stdin/stdout is a TTY

This closes #2989.
This commit is contained in:
AnotherTest 2020-08-05 10:00:01 +04:30 committed by Andreas Kling
parent 70eb7aa627
commit 7b15c85ff5
Notes: sideshowbarker 2024-07-19 04:15:54 +09:00
3 changed files with 15 additions and 5 deletions

View File

@ -267,7 +267,8 @@ int Shell::builtin_exit(int argc, const char** argv)
} }
stop_all_jobs(); stop_all_jobs();
save_history(); save_history();
printf("Good-bye!\n"); if (m_is_interactive)
printf("Good-bye!\n");
exit(exit_code); exit(exit_code);
return 0; return 0;
} }

View File

@ -58,7 +58,7 @@ extern char** environ;
void Shell::print_path(const String& path) void Shell::print_path(const String& path)
{ {
if (s_disable_hyperlinks) { if (s_disable_hyperlinks || !m_is_interactive) {
printf("%s", path.characters()); printf("%s", path.characters());
return; return;
} }
@ -1092,9 +1092,17 @@ Shell::Shell()
int rc = gethostname(hostname, Shell::HostNameSize); int rc = gethostname(hostname, Shell::HostNameSize);
if (rc < 0) if (rc < 0)
perror("gethostname"); perror("gethostname");
rc = ttyname_r(0, ttyname, Shell::TTYNameSize);
if (rc < 0) auto istty = isatty(STDIN_FILENO);
perror("ttyname_r"); m_is_interactive = istty;
if (istty) {
rc = ttyname_r(0, ttyname, Shell::TTYNameSize);
if (rc < 0)
perror("ttyname_r");
} else {
ttyname[0] = 0;
}
{ {
auto* cwd = getcwd(nullptr, 0); auto* cwd = getcwd(nullptr, 0);

View File

@ -218,6 +218,7 @@ private:
Vector<LocalFrame> m_local_frames; Vector<LocalFrame> m_local_frames;
HashMap<String, String> m_aliases; HashMap<String, String> m_aliases;
bool m_is_interactive { true };
}; };
static constexpr bool is_word_character(char c) static constexpr bool is_word_character(char c)