Получение имени эмулятора терминала внутри сценария оболочки

Из каталога test сделайте:

mv -t player *.txt

Предполагая, что все текстовые файлы заканчиваются на .txt.

Это mv все .txt файлы из текущего каталога (test/) в подкаталог player/.

3
20.02.2016, 01:16
2 ответа
ps -o comm= -p "$(($(ps -o ppid= -p "$(($(ps -o sid= -p "$$")))")))"

Может дать хорошие результаты. Он дает имя процесса, который является родительским для лидера сеанса. Для процессов, запущенных в эмуляторе терминала, это обычно будет процесс, выполняющий этот эмулятор терминала (если только не выполняются такие вещи, как screen , expect , tmux ... (хотя обратите внимание, что screen и tmux являются эмуляторами терминала), либо новые сеансы запускаются явно с помощью setsid , start-stop- daemon ...)

Если вы обнаружите, что вложенные скобки трудно читать, вы можете записать их в несколько строк:

ps -o comm= -p "$((
                  $(
                    ps -o ppid= -p "$((
                                      $(
                                        ps -o sid= -p "$$"
                                      )
                                    ))"
                  )
                ))"

Или использовать переменные (которые также могут помочь сделать сценарий более понятным):

sid=$(ps -o sid= -p "$$")
sid_as_integer=$((sid)) # strips blanks if any
session_leader_parent=$(ps -o ppid= -p "$sid_as_integer")
session_leader_parent_as_integer=$((session_leader_parent))
emulator=$(ps -o comm= -p "$session_leader_parent_as_integer")

Вы также можете попробовать выполнить синтаксический анализ wtmp , где эмуляторы терминала обычно регистрируют запись со своим pid, связанным с псевдотерминальным устройством. Это работает для меня в системе Debian при условии, что не задействованы expect / screen / tmux ...:

ps -o comm= -p "$(
  dump-utmp -r /var/log/wtmp |
  awk -v tty="$(ps -o tty= -p "$$")" -F ' *\\| *' '
    $2 == tty {print $5;exit}')"

(с использованием dump-utmp из GNU acct ).

7
27.01.2020, 21:11

Чтобы найти имя эмулятора терминала, используемого текущей оболочкой, вы можете попросить систему X Window дать вам имя окна, которое оболочка в настоящее время отображается в:

$ xwininfo -id $WINDOWID | awk '/^xwin/ { print $NF }'

Это возвращает строку «xterm» для меня в XTerm и «urxvt» , когда я запускаю в Rxvt-unicode. Результат, вероятно, будет другим, если у вас есть привычка менять заголовок окна, потому что я думаю, что это то, что вам здесь возвращают.

2
27.01.2020, 21:11

Теги

Похожие вопросы