直後にユーザーにメッセージを表示する方法はありますか?最初ログイン?
私は彼に「このアカウントで初めてログインすることです」と見せたい。
答え1
アカウントを作成するときというファイルを作成します~/.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
(参照:バッシュ開始ファイルマニュアルに記載されています)。/etc/profile
ソース内のすべての*.sh
ファイル/etc/profile.d/
なので、ここにファイルを追加すると、コンピュータのすべてのユーザーが表示できます。
セッションが次の状態の場合にのみメッセージを印刷しようとします。インタラクティブ。あなたのプロフィールから何でも印刷すると、非対話型と見なされるコンテンツが壊れる可能性があります(たとえば、ssh-copy-id
これは特に壊れていませんが)。 bash変数には、$-
次のコマンドを使用して設定されたいくつかの設定が含まれていますset
。
$ bash -c 'echo $-; set -ex; echo $-'
hBc
+ echo ehxBc
ehxBc
この型のパラメータ拡張は、${-#*i}
「i」で終わる先行部分文字列を削除します。$-
対話型bashセッションの場合は「i」のみが含まれるため、"$-"
セッションが対話型の場合にのみ同じではありません。"${i#*i}"
これをテストする別の方法があります。このシェルは対話型ですか?-- この方法を使用する理由は、/etc/profile が実行する操作だからです。