Определите, открыт ли терминал во время землетрясения

[112348] При компоновке[12116] вы обычно не компонуете [112839]/usr/local/* [112840] с [112841]/bin[112842], но это скорее историческая практика. В общем, есть несколько "технических" причин, по которым вы не можете делать то, что предлагаете.[12117]Ссылка на исполняемые файлы в [112843]/bin[112844] может вызвать проблемы:[12118]Вероятно, самой большой оговоркой будет, если в вашей системе пакеты управляются каким-либо менеджером пакетов, таким как RPM, dpkg, APT, YUM, pacman, pkg_add и др. В этих случаях вы, как правило, хотите, чтобы менеджер пакетов выполнял свою работу и управлял такими каталогами, как [113308]/sbin[113309], [113310]/bin[113311], [113312]/lib[113313] и [113314]/usr[113315]. Одним из исключений является [113316]/usr/local[113317], который, как правило, является безопасным местом, чтобы делать то, что вы считаете нужным на коробке, не беспокоясь о том, что менеджер пакетов будет вмешиваться в ваши файлы.[12119]Часто в исполняемых файлах, собранных для [113318]/usr/local[113319], этот PATH будет жестко закодирован в их исполняемых файлах. Также могут быть конфигурационные файлы, которые включены в [113320]/usr/local[113321] как часть установки этих приложений. Таким образом, связывание только с исполняемым файлом может привести к проблемам с нахождением этих приложений в файлах [113322].cfg[113323] позже. Вот пример такого случая:[12120]$ строки /usr/local/bin/wit | grep '/usr/local'. /usr/local/share/wit /usr/local/share/wit/ [12121]Та же проблема, которая возникает при поиске файлов [113326].cfg[113327], может возникать и с "вспомогательными" исполняемыми файлами, которые необходимо запустить основному приложению. Они также должны быть скомпонованы в [113328]/usr/bin[113329], зная, что это может быть проблематично и проявляться только тогда, когда вы действительно пытаетесь запустить скомпонованное приложение. ПРИМЕЧАНИЕ: [12122]/usr/bin[112852] в общем случае лучше избегать соблазна связываться с одним приложением в [112853]/usr/bin[112854].[12123]/etc/profile. d[12124]/etc/profile.d[112858].[12125] Такой файл, как этот, [112859]/etc/profile, можно легко добавить к каждому [112855]$PATH[112856]. d/maven.sh[112860]:[12126]Обычно вы делаете это как администратор, а не загрязняете этим настройки всех пользователей. [12127]Используя альтернативы[12128]Большинство дистрибутивов теперь предоставляют другой инструмент под названием [112861]альтернативы[112862] (Fedora/CentOS) или [112863]обновления-альтернативы[112864] (Debian/Ubuntu), которые вы также можете использовать для зацикливания на утилитах [112865]$PATH[112866], которые могут находиться за пределами [112867]/bin[112868]. Использование таких инструментов предпочтительнее, так как они больше соответствуют тому, что большинство администраторов считают "стандартной практикой", и поэтому облегчают передачу систем от одного администратора другому.[12129]Этот инструмент делает аналогичную вещь при создании ссылок в [112869]/bin[112870]; но он управляет созданием и уничтожением этих ссылок, так что проще понять предполагаемую настройку системы, когда это делается с помощью инструмента, по сравнению с [112867]/bin[112870]. Это я использую эту систему для управления Java Oracle на ящике:[12131]Вы можете увидеть эффект от этого:[12132]Мои $0.02[12133]Создание ссылок в [112871]/bin[112872], хотя это и правдоподобно, но большинство сисадминов, скорее всего, будут сильно отговаривать вас от этого:[12134]Будет хмуриться, потому что это рассматривается как обычай и может привести к путанице, если другой администратор должен будет поднять коробку [12135]Может привести к выходу системы из строя в будущем в результате этой "хрупкой" настройки. [12136]
2
28.11.2014, 13:23
1 ответ

Там нет надежного способа. Срок использует то же значение для в основном совместимых эмуляторов; Самые современные эмуляторы терминала помимо экрана и отчета TMUX xterm .

Вы можете исследовать список процессов, чтобы найти родитель родителей Vim. Это скажет вам в каком эмуляторе терминала (если есть) VIM работает в общем случае, когда VIM был запущен из оболочки, который был запущен непосредственно в эмуляторе терминала. Вы даже можете быть немного умнее и пройти через список процессов, идя от VIM к своему родину, затем родитель родительского родителя и так далее, и останавливаясь, когда вы найдете процесс, который не работает на том же терминале, что и его ребенок: что Процесс, вероятно, эмулятор терминала.

Эта эвристика может быть одурачена несколькими способами - в частности, потому что это возможно (хотя редкость) запустить программу из любого места и заставить ее взаимодействовать в другом терминале путем перенаправления его ввода и вывода.

Вот слегка проверяемый скрипт, который показывает командную строку эмулятора терминала, на котором работает текущий процесс, предполагая, что процесс запускается в качестве потомка этого терминала эмулятора без перенаправления Shenanigans.

#! /bin/sh
set -f
pid=$PPID
my_tty=$(ps -p $$ -o tty=)
while
  [ "$pid" -ne 1 ] &&
  set -- $(ps -p "$pid" -o ppid= -o tty= -o args=) &&
  [ "$2" = "$my_tty" ]
do
  pid=$1
done
shift; shift
printf '%s\n' "$*"

Вызовите этот скрипт , какой-эмулятор терминала . В вашем .vimrc , вы можете добавить

let terminal_emulator=system('which-terminal-emulator')
if terminal_emulator =~ '.*guake.*$'
  …
endif
2
27.01.2020, 22:13

Теги

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