При создании учетной записи создайте файл с именем ~ / .not_logged_in_yet
. У него не обязательно должно быть какое-либо содержимое, файл просто должен существовать:
touch ~user/.not_logged_in_yet # create the file
chown user ~user/.not_logged_in_yet # should be owned by the user
chmod u+rw ~user/.not_logged_in_yet # user must be able to delete it
Затем создайте сценарий с именем /etc/profile.d/check_first_login.sh
, который содержит
#!/bin/bash
# only do this for interactive shells
if [ "$-" != "${-#*i}" ]; then
if [ -f "$HOME/.not_logged_in_yet" ]; then
echo "Welcome, this is your first login"
rm "$HOME/.not_logged_in_yet"
fi
fi
Когда вы входите в систему с bash в качестве оболочки оболочка будет исходным кодом / etc / profile
(см. Файлы запуска Bash в руководстве). / etc / profile
источники всех файлов *. Sh
в /etc/profile.d/
, поэтому добавление файла делает его видимым для всех пользователей на ваша машина.
Вы хотите распечатать это сообщение, только если сеанс интерактивный . Печать чего-либо из вашего профиля может сломать вещи, которые должны быть не интерактивными (например, ssh-copy-id
- хотя я не знаю, ломается ли это конкретно). Переменная bash $ -
содержит некоторые настройки, установленные с помощью команды set
:
$ bash -c 'echo $-; set -ex; echo $-'
hBc
+ echo ehxBc
ehxBc
Эта форма расширения параметра $ {- # * i}
удаляет ведущая подстрока, оканчивающаяся на «i». $ -
будет содержать "i" только в том случае, если это интерактивный сеанс bash, поэтому "$ -"
не будет равно только "$ {i # * i} "
, если сеанс интерактивный. Есть и другие способы проверить это: см. Эта оболочка интерактивна? - Я использовал этот метод, потому что это то, что делает / etc / profile.
Так как вы используете Bash, вы можете использовать его расширения фигурных скобок:
gunzip {20170307..20170314}*.gz
Если вы хотите только просмотреть содержимое файлов, добавьте -c
после gunzip
.
Если в последовательности отсутствуют файлы, gunzip
сообщит об этом, но все равно обработает все файлы, которые присутствуют в последовательности. В этом случае также стоит отметить, что само расширение завершится ошибкой, если установлен параметр оболочки failglob
, но это не значение по умолчанию в Bash.
find
подход:
find. -maxdepth 1 -type f -regextype posix-egrep \
-regex ".*/201703(0[7-9]|1[0-4]):[0-5][0-9]\.out\.gz$" -exec gunzip {} \;
gunzip -c
будет только записывать содержимое в стандартный вывод, а не распаковывать его.
Для ваших целей:
for a in {07..14}; do gunzip -c '201703'$a':02.out.gz'; done