Команда отлично работает на Linux, но на OS X Mountain Lion, когда я делаю:
rm !(myfile)
Баш жалуется:
bash: !: event not found
Есть ли способ сделать то же самое на OS X?
Это потому, что вы не установили параметр extglob , который придает особое значение ! ,
В вашем Bash напишите:
shopt -s extglob
Затем команда должна выполняться как положено.
По умолчанию !расширяется до идентификатора процесса последней выполненной фоновой (асинхронной) команды. С набором extglob ! может использоваться для сопоставления с образцом, но только в сочетании с круглыми скобками после него () .
Конечно, вы можете добавить эту строку в ваш ~/.bash_profile чтобы она была установлена каждый раз, когда вы открываете Terminal.app. По умолчанию OS X запускает оболочку входа в систему, поэтому эти параметры должны быть установлены в ~/.bash_profile а не в ~/.bashrc как вы, вероятно, привыкли к эмуляторам терминала Linux.