Skip to content

Shell env

shell環境

bash & shell

有很多種不同shell, 可以透過echo $0來確認目前使用的shell

ubuntu@ubuntu$ echo $0
/bin/bash
在CLI中,看不出目前開的shell及父子關係,可以利用ps查看關係
ubuntu@ubuntu:~/CPP_Project$ bash
ubuntu@ubuntu:~/CPP_Project$ bash
ubuntu@ubuntu:~/CPP_Project$ bash
ubuntu@ubuntu:~/CPP_Project$ ps -f
UID          PID    PPID  C STIME TTY          TIME CMD
ubuntu     34038   33903  0 12:21 pts/0    00:00:00 /bin/bash --init-file /home/ubuntu/.vscode-server/cli/servers/Stable-611f9bfce64f25108829dd295f54a6894e87339d/server/out/vs/workbench/contrib/terminal/browser/med
ubuntu     35418   34038  0 21:17 pts/0    00:00:00 bash
ubuntu     35437   35418  1 21:17 pts/0    00:00:00 bash
ubuntu     35450   35437  1 21:17 pts/0    00:00:00 bash
ubuntu     35489   35450  0 21:17 pts/0    00:00:00 ps -f

ubuntu@ubuntu:~/CPP_Project$ ps --forest
    PID TTY          TIME CMD
  34038 pts/0    00:00:00 bash
  35418 pts/0    00:00:00  \_ bash
  35437 pts/0    00:00:00      \_ bash
  35450 pts/0    00:00:00          \_ bash
  35541 pts/0    00:00:00              \_ ps

bash

bash也支援下列選項 -cstring中讀取命令 -i 啟動能夠讀取用戶輸入的shell -l 作為登入shell -r 啟動一個受限的shell -s 從標準輸入中讀取命令

可以從echo $BASH_SUBSHELL查看是否生成子shell,返回0代表沒有

開啟__bash shell__時,通常會從5個不同啟動文件讀取命令 * /etc/profile : default * $HOME/.bash_profile * $HOME/.bashrc * $HOME/.bash_login * $HOME/.profile

大多數發行版中,保存個人用戶的bash shell為$HOME/.bashrc


變量

使用自定義變量時,使用小寫可以避免同名產生的災難 在子shell修改並不影響父shell的全域變量值 * printenv 輸出全域環境變數,或變數值

也可以用echo $顯示變量值 * set 顯示特定進程的所有環境變量 * unset刪除環境變量 * 設定全域變量的方法,也是先創造局部變量後,再將其導入全域變量export

my_variable="I am Global now"
export my_variable
echo $my_variable
* 數據變量:將環境變量作為數據使用
$ mytest=(zero one two three four)
$ echo $mytest
zero
$ echo ${mytest[2]}
two
$ echo ${mytest[*]}
zero one two three four