В Emacs, “близко” часто называется, “уничтожают” или “удаляют”. Команда для закрытия кадра delete-frame
, связанный с C-x 5 0
по умолчанию. C-x 5
префикс для команд кадра.
Обратите внимание, что кадр, в терминологии Emacs, то, что большая часть мира называет окном; окно, в терминологии Emacs, то, что часть мира называет областью. (Кадры содержат одно или несколько окон, окна содержат, один или несколько разделяет на области.) Понятие, которое соответствует файлу или приложению, работающему в Emacs, является буфером. В любое время каждое окно показывает буфер, и буфер можно показать в одном или нескольких кадрах или ни одном вообще. В отличие от большинства других приложений мультидокумента, Emacs не связывает отредактированные объекты (файлы и такой) к элементам пользовательского интерфейса (окна). Для закрытия файла или приложения уничтожьте буфер: kill-buffer
, связанный с C-x k
; ввести C-x k RET
уничтожить текущий буфер.
Если Вы знаете название команды, можно узнать, с каким ключом (ключами) оно связывается путем выполнения where-is
, который самостоятельно связывается с C-h w
(C-h
для справки — можно также ввести f1
— и w
для, “где эта команда”). Так, например, для выяснения, что ключ delete-frame
связывается с если таковые имеются, ввести C-h w delete-frame RET
(как обычно, работы заполнения клавишей Tab).
Для выяснения, чем называют команду можно работать apropos-command
(C-h a
). Например, C-h a buffer RET
показывает список команд, имя которых содержит “буфер” (существуют многие из тех), с короткой сводкой справки для каждого. Если Вы уже определили местоположение команды в меню, можно нажать C-h k
(describe-key
) затем нажмите на запись меню, и это покажет справку для команды. Если Вы нажимаете C-h c
(describe-key-briefly
), Emacs покажет просто название команды в строке сообщения. В дополнение к функциям самодокументирования можно, конечно, искать вещи в руководстве (C-h r
прочитать руководство).
grep
вернет успех, если найдет хотя бы один экземпляр шаблона, и ошибку, если нет. Таким образом, вы можете либо добавить предложение else
, если хотите, чтобы выводились как «выполняет», так и «не выполняет», либо вы можете просто отменить условие if
, чтобы получать только ошибки. Пример каждого из них:
if grep -q "$user2" /etc/passwd; then
echo "User does exist!!"
else
echo "User does not exist!!"
fi
if ! grep -q "$user2" /etc/passwd; then
echo "User does not exist!!"
fi
Альтернативой является поиск статуса выхода grep
. Например:
grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
echo "User does not exist!!"
Если grep
не найдет соответствия, он выйдет из 1
, поэтому $?
будет 1
. grep
всегда будет возвращать 0
в случае успеха. Так что безопаснее использовать $? != 0
, чем $? == 1
.
Вы можете использовать параметр grep "-L / --файлы -без соответствия -" , чтобы проверить, не содержит ли файл строку:
if [[ $(grep -L "$user2" /etc/passwd) ]]; then
echo "User does not exist!!";
fi
Я решаю это простым лайнером:
for f in *.txt; do grep "tasks:" $f || echo $f; done
Команда проверит все файлы в каталоге с расширением txt и либо запишет строку поиска (, т.е. «задачи :» ), если найдена, либо имя файла.