В качестве альтернативы extglob (хотя это очень хороший ответ, и каждый должен иметь shopt -s extglob globstar в своем .bashrc), вы можете использовать глобальную переменную $ GLOBIGNORE. Предположим, вы хотите получить каждый файл, кроме «foo.txt» и «bar baz.txt»:
GLOBIGNORE=foo.txt:'bar baz.txt'
... однако это приведет к включению опции оболочки dotglob, что означает что * будет соответствовать файлам, начинающимся с точки (которые обычно скрыты). Таким образом, вам понадобятся две команды:
GLOBIGNORE=foo.txt:'bar baz.txt'
shopt -u dotglob
Поскольку это глобальная переменная, она будет влиять на каждый глобус, который вы используете, до тех пор, пока $ GLOBSTAR не будет отменен ни путем выхода из системы, ни с помощью
GLOBIGNORE=
Он также будет работать только с литеральными строками, переданными переменной. Вы можете понять, что я имею в виду, установив $ GLOBIGNORE и посмотрев разницу между этими командами:
printf '%s\n' *
printf '%s\n' ./*
Чтобы убить процесс на порту, вы можете сделать:
$ fuser -n tcp -k 443 && /opt/lampp/xampp start
Измените && на ;, если вы хотите, чтобы он запускал xampp независимо от того, на этом порту было что-то, что было.