Вы могли бы попробовать это:
:.,'c normal @a
Это использует “расположенный” :normal
управляйте для выполнения команды нормального режима @a
с курсором, последовательно расположенным на первый столбец каждой строки, запускающейся с текущей строки и снижающейся к строке с меткой c. Если метка, окажется, будет выше курсора, то Vim спросит, хотите ли Вы инвертировать диапазон.
Это - не всегда то же как применение количества к @a
(например. 5@a
) потому что содержание регистра, можение не всегда спускает одну строку каждый раз, когда это выполняется (рассматривают “макрос”, который использует поиски для перемещений вместо j
или k
: это потребовало бы более высокого количества к полностью производственным линейкам, которые имеют несколько соответствий).
Ваша система, вероятно, имеет bash
установленный в нескольких местоположениях, ли как различные версии bash
или просто символьные ссылки.
which
не действительно полезная команда в большинстве целей - это не действительно портативно или очень применимо в сценариях. В целом, type
лучше. Идея позади which
должен сделать a PATH
ищите команду, которую Вы даете ему как аргумент.
$SHELL
не обязательно отражает в настоящее время рабочую оболочку. Вместо этого $SHELL
предпочтительная оболочка пользователя, которая обычно является той, начинаются /etc/passwd
. При запуске другой оболочки после входа в систему Вы не можете обязательно ожидать $SHELL
соответствовать текущей оболочке больше.
Как видете, $SHELL
и which
абсолютно не связаны. Ни один из них не скажет Вам, что окружает Вас, на самом деле работают.
Примечание стороны: К сожалению, соответствуя оболочке Вы в настоящее время работаете к местоположению в файловой системе, более твердо, чем можно было бы думать. Это вызвано тем, что двоичные файлы загружаются в память для выполнения, и в большинстве систем копия в памяти продолжит хорошо работать даже после удаления оригинала из диска (ядро может иметь в наличии дисковую копию в "неопределенности", пока это больше не действительно необходимо). Я не думаю, что существует любой портативный способ пойти об этом - необходимо было бы обратиться к платформе определенные методы. Например, на Linux, исследуя ссылку /proc/$$/exe
должен дать Вам достойную идею того, что выполняет файл (где $$
идентификатор процесса Вашей рабочей оболочки). К сожалению, я не знаком с Солярисом, таким образом, я не могу помочь Вам там.
Другие ответы хороши, но мне нравится давать демонстрацию.
% echo $SHELL
/bin/zsh
% which bash
/bin/bash
login
когда Вы входите в систему. В моем случае, /bin/zsh
.$PATH
bash
команда может быть найдена.Каждый не подразумевает второе, ни наоборот.
Я не собираюсь вновь заявлять об ответах других людей, но в дополнение к этому я хочу указать на некоторые вещи.
/bin/bash
/bin
символьная ссылка на ./usr/bin
$PATH
на Солярисе /usr/bin:/bin
Вот почему Вы видите это поведение.
/bin/
и /usr/bin
Я соглашаюсь, что это не имеет смысла, но если у Вас нет a PATH
объявленный это - то, что система дает Вам.
– bahamat
20.07.2012, 03:04
echo $SHELL
показывает значение SHELL
переменная среды. Это - пользовательская конфигурация, которую можно установить на путь к любимой интерактивной оболочке. Много программ вызывают $SHELL
при выяснении вызвать оболочку.
Я думаю, что все оболочки оставляют эту переменную в покое, если она не сброшена, когда они запускают. Наборы Bash SHELL
к его собственному пути, если переменная сброшена, когда она запускается. Наборы ATT ksh93 SHELL
кому: /bin/sh
если сброшено (даже если /bin/sh
некоторая несвязанная оболочка). Ksh (все версии) проверяет ли SHELL
rsh
когда это запускается; если это, это запускается как ограниченная оболочка.
which bash
показывает путь к исполняемому файлу удара (кроме тех случаев, когда он не делает — необходимо использовать type bash
вместо этого). Более точно это ищет каталоги в $PATH
для названного исполняемого файла bash
.
echo $0
, в интерактивной оболочке, показывает название команды, которое использовалось для вызова оболочки.
ps $$
(введенный от оболочки), отображает информацию о процессе оболочки ($$
расширен до идентификатора процесса оболочки).
ls -l /proc/$$/exe
показывает полный путь исполняемому файлу для оболочки
Например, моя любимая оболочка является zsh, но здесь я только что запустил скомпилированную версию дома удара, который не находится в $PATH
.
% ./bash
$ echo $SHELL
/bin/zsh4
$ type bash
bash is /usr/bin/bash
$ echo $0
./bash
$ readlink /proc/$$/exe
/home/gilles/src/bash-git/bash
$ pwd
/home/gilles/src/bash-git
$ rm bash
$ echo $0
./bash
$ readlink /proc/$$/exe
/home/gilles/src/bash-git/bash (deleted)
which
команда перерывает каталоги, указанные в Вашем $PATH
переменная и возвраты первое соответствие, которое это находит, поскольку это будет файлом, который будет выполняться.
$SHELL
возвращает каноническое имя файла, в настоящее время работающего, например, /bin/bash
. /usr/bin/bash
вероятно, ссылка на /bin/bash
так или иначе. Использовать $SHELL
найти название Вашего текущего интерпретатора команд.
which
и type
@Gilles и @jw013, при использовании tcsh
оболочка, which
встроенная команда и type
не найден. Заключения: (1) Необходимо знать оболочку, которую Вы выполняете перед вводом команды. (2) Необходимо всегда помещать #!/bin/bash
(или независимо от того, что необходимо) наверху сценариев.
– StarNamer
20.07.2012, 19:05
$SHELL
набор переменной среды с путем к текущей оболочке входа в систему, которая в этом случае является ударом. Если необходимо было использовать chsh
управляйте для переключения на некоторую другую оболочку (например, zsh), затем Вы видели бы /bin/zsh
когда Вы работали echo $SHELL
.
which
команда на самом деле не имеет никакого отношения к определенной оболочке кроме того, чтобы быть ответственным за определение, какая программа была бы запущена, если бы необходимо было назвать ту программу непосредственно. У Вас могло бы быть несколько версий той программы в путях в Вашей переменной $PATH, которая могла быть выполнена. Причина Вы видите /bin/bash
когда Вы работаете which bash
то, потому что это - то, где система сначала находит bash
программа в иерархии, которая является $PATH
.
Можно работать which
на любой команде, не только оболочке.
В соответствии с Солярисом, работает один простой способ знать, что окружает Вас, и что запустилось, это ptree
, здесь моя оболочка является ksh:
$ ptree $$
408 /usr/lib/ssh/sshd
1131 /usr/lib/ssh/sshd
1132 /usr/lib/ssh/sshd
1142 -ksh
1146 ptree 1142
Стандартный способ добраться, что на самом деле выполнит команда, состоит в том, чтобы использовать команду типа.
$ type bash
bash is /usr/bin/bash
Учитывая факт /bin
и /usr/bin
являются взаимозаменяемыми в соответствии с Солярисом (и это - тенденция на другом Unix как Ose также), возвратится ли удар типа /bin/bash
или /usr/bin/bash
зависит только от того, что сначала появляется на Вашем PATH
и так или иначе не имеет значения так очень.