Вы можете поставить ловушку
DEBUG
и затем проверить переменную BASH_COMMAND
. Добавьте это в начало сценария:
log() {
case "$1" in
python\ *)
;&
pkill\ *)
printf "%s\n" "$*"
;;
esac
}
trap 'log "$BASH_COMMAND"' DEBUG
Код читабелен; он просто проверяет, начинается ли первый аргумент с python
или pkill
, и печатает его, если это так. А ловушка использует BASH_COMMAND
(который содержит команду, которая будет выполнена) в качестве первого аргумента.
$ bash foo.sh dev
python ascript.py
python: can't open file 'ascript.py': [Errno 2] No such file or directory
$ bash foo.sh prod
It doesn't look like you're running me as root. This probably won't work. Press any key to continue.
pkill -f nginx
foo.sh: line 32: nginx: command not found
Обратите внимание, что хотя в case
используются глобы, вы можете с тем же успехом сделать:
if [[ $1 =~ python|nginx ]]
then
printf "%s" "$*"
fi
И использовать регулярные выражения.
Сегодня у меня была очень похожая проблема с похожими симптомами :вопросительные знаки в полях разрешений и прав собственности, и даже с помощью root/sudo я не смог ничего изменить. Затем я, наконец, вспомнил, что этот конкретный каталог на самом деле был точкой монтирования в каталоге общего доступа к файлам Windows, который я установил несколько недель назад (во время пробного сеанса, чтобы проверить, подходит ли Samba/CIFS для моего проекта )и, по-видимому, за это время его размонтировали. После повторного ввода команды mount.cifs
и ввода моих учетных данных для Windows-части нашей сети 'ls' сообщил об обычном разрешении и информации о владении каталогом. Поскольку симптомы выглядели точно так же, как у вас, мне интересно, находитесь ли вы в похожей ситуации, а также потому, что «D :» выглядит очень похоже на Windows -.
Мое решение:
$ sudo mount -v | grep mount_point
Это показывает смонтированные файловые системы точки монтирования _и показывает, что моя точка монтирования все еще смонтирована, хотя ничего не отображается.
$ umount -f mount_point
Права доступа и права доступа к каталогу теперь отображаются правильно.