rm! (myfile) не работает на OS X?

1

Команда отлично работает на Linux, но на OS X Mountain Lion, когда я делаю:

rm !(myfile)

Баш жалуется:

bash: !: event not found

Есть ли способ сделать то же самое на OS X?

user151851
источник
Что вы пытаетесь сделать, удалите файл с именем !(myfile) ? Или же... ?
Kyle Jones

Ответы:

2

Это потому, что вы не установили extglob вариант, который придает особое значение !,

В вашем Bash напишите:

shopt -s extglob

Затем команда должна выполняться как положено.

По умолчанию, ! раскрываться к идентификатору процесса последней выполненной фоновой (асинхронной) команды. С extglob задавать, ! может быть использован для сопоставление с образцом , но только в сочетании с последующими скобками (),

Конечно, вы можете добавить эту строку в свой ~/.bash_profile чтобы он был установлен каждый раз, когда вы открываете Terminal.app. OS X по умолчанию запускает оболочку входа в систему, поэтому эти параметры должны быть установлены в ~/.bash_profile и не ~/.bashrc как вы, вероятно, привыкли из эмуляторов терминала Linux.

slhck
источник
"!" имеет особое значение для истории команд, extglob позволяет использовать его для сопоставления с отрицательным шаблоном, который может переопределить это. Наблюдаемая ошибка связана с функцией истории (незначительное раздражение в том, что ошибочная команда не добавляется в историю ваших команд).
mr.spuratic
PID последнего фонового процесса $!, Просто ! по умолчанию не расширена до bash.
Lri
@ Лаури, да, в сочетании с $, как объяснено в справочном руководстве Bash. Может быть, эта часть не была ясна.
slhck