bash
- не лучшая оболочка для вычисления даты, так как ее возможности обработки даты очень ограничены.
С zsh
:
zmodload zsh/datetime
d=03012012
strftime -rs d %m%d%Y%H ${d}12
strftime %m%d%Y $((d-86400))
С ksh93
:
d=03012012
printf "%(%m%d%Y)T\n" "${d:4}${d:0:4} yesterday"
С bash
вам придется либо выполнять вычисления вручную, либо полагаться на perl
или некоторые расширения GNU или FreeBSD для утилиты date
.
При использовании sudo
ваш $PATH
из соображений безопасности переопределяется такой строкой в вашем файле /etc/sudoers
:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Несмотря на то, что подобная запись присутствует в/etc/environment
:
$ cat /etc/environment
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/tmp
И, похоже, подхватили:
$ sudo env | grep PATH
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/tmp
И у нас есть скрипт в/tmp
:
$ ls -l /tmp/blah.bash
-rwxrwxr-x 1 vagrant vagrant 20 Aug 8 20:57 /tmp/blah.bash
И этот скрипт будет печатать whoami
при запуске:
$ cat /tmp/blah.bash
#!/bin/bash
whoami
Судо не дает нам это сделать:
$ sudo blah.bash
sudo: blah.bash: command not found
Но если я отредактирую свой /etc/sudoers
файл:
$ sudo visudo
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/tmp
Теперь работает:
$ sudo blah.bash
root
Хорошо подумайте, почему вы добавляете дополнительные каталоги в безопасный путь sudo
. Это настроено так по очень веской причине. Не относитесь легкомысленно к добавлению дополнительных путей для команд sudo
!
Добавление дополнительных каталогов подвергает вас и ваших пользователей дополнительным рискам, которые вы не осознаете, пока не станет слишком поздно.