Info
#

2025/06/23 (Mon) 08:36:18 GMT+0000 (UTC)
Type: PC | System: Unknown | Browser: Unknown ... More

Menu
.
+
#
  • @ /note/bash/post-SetAutomaticExecutionBashScript
Content
.
+
#

Post: Nekoformi
Date: 2024/02

Set Automatic Execution Bash Script

Bashには特定の状況で実行されるファイルが存在します。大抵はユーザー単位で用意されています。

場所 ファイル名 機能
~/ .bash_profile 実行するコマンドを記述します:ログイン時に。
~/ .bash_logout 実行するコマンドを記述します:ログアウト時に。
~/ .bashrc 実行するコマンドを記述します:Bashの起動時に。

.bash_profile

環境変数を設定する際に便利なファイルです。例えば、echoコマンドと追記リダイレクション(>>)を用いて~/My PathにPATHを通す操作をファイルに追記してみましょう。

Bash
+
#
1:
$ sudo echo "export PATH=\$PATH:~/\"My Path\"" >> ~/.bash_profile
  • 定義された変数(シェル変数)はターミナル(シェル)を閉じると消えてしまうため、恒久的に変数を定義したい場合はexportコマンドで環境変数に設定します。
  • 変数は変数名=内容で定義して$変数名で呼出しますが、PATHは既に内容が定義されているため、上書きではなく書き足す操作としてPATH=$PATH:内容を定義します。これは、PATHが複数の内容をコロン(:)で区切るためです。
  • 文字列に空白( )が含まれる場合は空白をエスケープ(\ )するか、引用符(")で囲む必要があります。また、変数として機能しないドル記号や引用符の内部で引用符を記述する場合も同様にエスケープ(\$\")する必要があります。

当然ながら他のファイルを呼び出すことも可能なので、可読性や保守性を高めるために個別のファイルを用意しても構いません。

Bash
+
#
1:
$ sudo echo "bash ~/\"My Command\"/\"Run at Login.sh\"" >> ~/.bash_profile
~/My Command/Run at Login.sh
+
#
1:
2:
3:
#!/bin/bash export PATH=$PATH:~/"My Path"
  • Bashのコマンドをファイルに記述する際は、1行目にシバン・シェバング(#!/bin/bash)を書くことで機能を明示します。

.bash_logout

私はコマンドやアクティビティーの履歴を残したくないので、ここで削除を行います。ファイルを削除する場合はrmコマンドを、ファイルの中身を削除する場合は/dev/null(虚無)を対象にリダイレクション(>)します。

Bash
+
#
1:
$ sudo echo "bash ~/\"My Command\"/\"Run at Logout.sh\"" >> ~/.bash_logout
~/My Command/Run at Logout.sh
+
#
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
#!/bin/bash # Disable Some History (only KDE) sudo cat /dev/null > ~/.local/share/recently-used.xbel sudo rm -f ~/.local/share/user-places.xbel.bak sudo rm -f ~/.local/share/user-places.xbel.tbcache sudo rm -rf ~/.local/share/RecentDocuments/* # Disable Command History history -c cat /dev/null > ~/.bash_history # Disable Log sudo rm -rf /var/log/*
  • Disable Some HistoryKDEのアクティビティーを操作する内容であるため、他のデスクトップ環境を使用している場合は専用のコードを記述する必要があります。

.bashrc

エイリアス(コマンドの略称)を設定する際に便利なファイルです。例えば、長いコマンドを頻繁に入力する場合はalias 略称="コマンド"を設定することで略称から元のコマンドを実行できます。他にも、プロンプト(コマンドの入力箇所に表示される情報)の変更やターミナルの改造が行えます。

Bash
+
#
1:
$ sudo echo -e "\nsource ~/\"My Command\"/\"Run at Bash Start.sh\"" >> ~/.bashrc
~/My Command/Run at Bash Start.sh
+
#
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
#!/bin/bash alias ll="ls -lhvA --time-style=\"+%Y/%m/%d %H:%M:%S\"" alias shf="sudo shred -n 1 -uz $1" alias shd="find ./ -name '*' -type f -print0 | xargs -0 -i -P 1 sudo shred -n 1 -uz {}" alias rmf="sudo rm -f $1" alias rmd="sudo rm -rf ./*" function cleanTerminal() { history -c cat /dev/null > ~/.bash_history clear unset blankLine echo -e "\e[01;31mThe beginning of something.\e[00;00m\n" } alias clean="cleanTerminal" function addBlankLine() { if [[ -z "$blankLine" ]]; then blankLine=true else printf "\n" fi } PS1="\[\e]0\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;33m\]\u@\h\[\033[01;00m\]: \[\033[01;32m\]\w\[\033[00;00m\] \$ " PROMPT_COMMAND="addBlankLine" clean
  • .bashrcには何かしらのコードが既に記述されている場合が多く、既存の内容と区別するために\nで空行を追加します。
  • echoコマンドでは-eオプションを付与することでエスケープシーケンス(改行を表す\n等)を解釈します。
  • .bashrc以外のファイルにエイリアスを記述する場合は、bashコマンドではなくsourceコマンドを使用して実行元の環境(.bashrc、つまりターミナル)にコマンドを展開する必要があります。
  • \e[XX;XXm文字列\e[XX;XXmはANSIエスケープシーケンス、\[文字列\]は制御シーケンスを記述するための特殊文字です。
  • PS1という変数に文字列を記述することで、プロンプトを変更します。
  • PROMPT_COMMANDという変数にコマンドや関数を記述することで、コマンドの処理が終了した後(=プロンプトが表示される前)に内容を自動で実行します。