Linux gnu screen — запускать команды немедленно при запуске screen?

Linux gnu screen — запускать команды немедленно при запуске screen?

В моем файле .screenrc есть эта строка для открытия одного окна экрана:

screen -t "normal"

И эта строка, чтобы открыть еще одно окно и запустить top:

screen -t "top" top

Они работают отлично, поэтому я захотел немедленно запустить приложение df && ls -alhв третьем окне, поэтому я поместил эту строку в .screenrc:

screen -t "df" df && ls -alh

Окно df так и не появилось, поэтому я подумал, что && может быть причиной проблемы, и попробовал сделать это только с df.

screen -t "df" df

Окно df по-прежнему не появляется.

Вопрос: Как мне запустить одну команду, а затем другую в одном и том же окне экрана через screenrc? Я бы хотел, чтобы это действовало точно так же, как в bash. Спасибо за любой совет.

решение1

Вероятно, он появляется, но исчезает после запуска.

Попробуйте следующее:

screen -t "df" bash -c 'df && sleep 50'

Это покажет вывод команды dfза 50несколько секунд.

Чтобы получить полезный dfвывод, я бы рекомендовал вам использовать watch:

screen -t "df" watch -n 10 df

Это будет запускаться dfкаждые 10 секунд, поэтому вы будете знать фактическое состояние свободного места на диске на этом терминале.

решение2

Старый вопрос, но он появился в результатах поиска раньше, чем ответ, который я нашел самым понятнымздесь.

Вот несколько решений, которые мне помогли:

screen -t Files zsh -c 'ls -lahG; exec zsh'

В моем файле .screenrc команда «exec zsh» открывает еще одну командную строку в окне внутри области после завершения команды/процесса «ls» (аналогично поведению ручного ввода команды в оболочке в окне GNU screen; я предполагаю, что это более эффективно, чем запуск команды «sleep», но буду признателен, если вы поправите меня, если я ошибаюсь.

screen -t Files zsh -c 'vim .'

Вышеизложенное работает для конкретного случая использования «ls».

Связанный контент