Команда отлично работает на 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.