В ударе просто введите Высокий звук +#.
Затем, когда Вы готовы, нажмите Up затем Высокий звук +#.
Первое помещает a #
в начале строки для превращения его в комментарий, затем принимает строку, как будто Вы нажали Enter.
Затем когда Вы делаете это во второй раз, когда это видит, что строка уже имеет a #
в запуске, таким образом, это удаляет его и принимает его, снова сохраняя Вас клавиша Enter.
Если второй раз просто вводит другого #
, затем необходимо ввести Высокий звук +-Высокий звук +# вместо этого.
Можно заставить zsh сделать то же путем помещения
bindkey -M emacs '\e#' pound-insert
в Вашем ~/.zshrc.
Или при использовании vi привязки можно ввести # от командного режима и в ударе и в zsh.
Один (по общему признанию не прекрасный) путь состоит в том, чтобы добавить результат ps --no-headers -o comm $PPID
к Вашему приглашению оболочки. Это скажет Вам название процесса, который породил Вашу оболочку. Если Вы будете во вложенном zsh, то скажет он "zsh". Если Вы будете в верхнем уровне zsh, то он считает "xterm" или "экран" или независимо от того, что Ваша оболочка работает в.
Чтобы сказать, являетесь ли Вы в ssh или su сессии, можно просто посмотреть на часть имени хоста и имени пользователя подсказки.
То, когда Вы выполняете вложенные экраны (который я не воображаю, является общей ситуацией), нет никакого способа, которым я могу думать, чтобы сказать, являетесь ли Вы в оболочке верхнего уровня вложенного экрана или оболочке верхнего уровня экрана верхнего уровня. Вы могли настроить экран, чтобы всегда отобразить строку состояния, которая заставит несколько строк состояния быть отображенными, если Вы будете на вложенных экранах.
Вы на самом деле натолкнулись на правильный термин ¹. Существует переменная среды SHLVL
который все главные интерактивные оболочки (удар, tcsh, zsh) увеличивают 1, когда они запускают. Таким образом, если Вы запускаете оболочку в оболочке, SHLVL
увеличения 1.
Это непосредственно не отвечает на Ваше беспокойство, однако, потому что SHLVL
переносит вещи как эмуляторы терминала. Например, в моей типичной конфигурации, $SHLVL
2 в xterm, потому что уровень 1 соответствует оболочке, которая выполняет мои X сессий (~/.xinitrc
или ~/.xsession
).
То, что я делаю, должно отобразиться $SHLVL
в моей подсказке, но только если родительский процесс оболочки является другой оболочкой (с эвристикой как, “если ее имя заканчивается в sh
плюс дополнительная пунктуация и цифры, это - оболочка”). Тем путем у меня есть очевидный визуальный признак в редком случае оболочки, работающей под другой оболочкой.
Возможно, Вы предпочли бы обнаруживать оболочки, которые работают непосредственно под эмулятором терминала. Можно сделать это справедливо точно: это оболочки, родительский процесс которых имеет другой терминал управления, так, чтобы ps -o tty= -p$$
и ps -o tty= -p$PPID
произведите другой вывод. Вы могли бы вручную сбросить SHLVL
к 1 в этих оболочках или наборе Ваше собственное TERMSHLVL
к 1 в этих оболочках (и увеличенный иначе).
¹, Хотя нельзя было бы думать это смотрящий на страницы руководства: ни одна из трех оболочек, которые поддерживают его, не включает слово “уровень” в их документацию SHLVL
.
ps -o tty= -p$pid
, это показывает терминал управления процесса, который определяет эмулятор терминала (xterm, экран, sshd, …), в котором работает процесс. Это не изменится, если Вы запустите оболочку с другой оболочки, но изменитесь при запуске нового эмулятора терминала. Если эмулятор терминала является собственным приложением Mac, может быть определенная для Mac тонкость, о которой я не знаю.
– Gilles 'SO- stop being evil'
17.10.2010, 15:14
ps -o tty= -p$$
и ps -o tty= -p$PPID
, потому что Вы сказали, что они должны произвести другой вывод. Или я неправильно понимал что-то?
– phunehehe
17.10.2010, 15:44
ps -p $$ -p $PPID
(снова, у меня нет опыта OSX, поэтому возможно, существует что-то необычное продолжение на OSX). подтвержденный
– Gilles 'SO- stop being evil'
17.10.2010, 15:53
ps -p $$ -p $PPID
дает (извините, я не знаю, как отформатировать комментарии), PID-pf phunehehe 210 ttys000 0:00.12 входа в систему времени CMD 209 ttys000 0:00.01 TTY - удар
– phunehehe
17.10.2010, 17:14
Не очень изящный, но Вы могли использовать структурный вид в htop для наблюдения отношений отцов и детей оболочки к другим рабочим процессам.
$ htop # then press 't' and scroll around or 'Ctrl-W' to find your shell proccess
И используйте это для выведения суммы оболочек, из которых необходимо будет выйти, прежде, чем прибыть в "корневую" оболочку
Я считаю, что
$ pstree -u | grep ${USER}
может быть весьма полезным для понимания того, как я «вписываюсь» в систему. Я предпочитаю его pstree -u ${USER}
.
Время от времени это будет напоминать мне, что я оставил nohup
задание работающим или подобное.
(Кроме того, я использую alias grep='grep --color=auto'
.)
ps: illegal option -- -
, какая-либо идея, почему? Я протестирую его снова в Linux скоро :) – phunehehe 17.10.2010, 15:00--option-name
главным образом определенные для GNU функции, так главным образом не доступно в стандартных системных утилитах вне Linux. Но можно получить эффектps --no-headers
портативно путем добавления=
после имени столбца. Такжеcomm
столбцом не является POSIX, ноcmd
столбец (который включает аргументы команды). Также-p
необходимо перед PID в синтаксисе POSIX. Следовательноps -o cmd= -p $PPID
является портативным и дает подобную информацию. – Gilles 'SO- stop being evil' 17.10.2010, 15:17comm
столбец указан POSIX и зарегистрирован на Mac OS X, тогда какcmd
столбец существует на Linux, но не является стандартным. программное обеспечение – Gilles 'SO- stop being evil' 17.10.2010, 21:29