Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(筆記)Operating System 裡的 environment variable #128

Open
gracekrcx opened this issue May 30, 2022 · 7 comments
Open

(筆記)Operating System 裡的 environment variable #128

gracekrcx opened this issue May 30, 2022 · 7 comments

Comments

@gracekrcx
Copy link
Owner

gracekrcx commented May 30, 2022

環境變數例如 PATH、HOME、MAIL、SHELL 等等,都是很重要的
HOME:cd ~ 去到自己的家目錄
SHELL:目前這個環境使用的 SHELL 程式
PATH:執行檔搜尋的路徑~目錄與目錄中間以冒號(:)分隔, 由於檔案的搜尋是依序由 PATH 的變數內的目錄來查詢,所以,目錄的順序也是重要的。

// 列出所有環境變數
$ env

export 指令

如果希望將自訂變數變成環境變數的話,讓該變數內容繼續的在子程序中使用,就執行

$ export 變數名稱

如果僅寫 export 而沒有接變數時,此時會把所有的『環境變數』都秀出來

$ export

echo 指令

// 變數在被取用時,前面必須要加上錢字號($)
$ echo $HOME  
$ echo $PATH

source 指令:讀入環境設定檔的指令

重新讀取修改後的設定檔

// 將家目錄的 ~/.zshrc 的設定讀入目前的 shell 環境中
// 底下這兩個指令是一樣的
$ source ~/.zshrc
$ . ~/.zshrc

設定 EV 範例:Configure the ANDROID_SDK_ROOT environment variable

STEP1
Add the following lines to your $HOME/.bash_profile or $HOME/.bashrc (if you are using zsh then ~/.zprofile or ~/.zshrc) config file:

export ANDROID_SDK_ROOT=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_SDK_ROOT/emulator
export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools

STEP2
Type source $HOME/.bash_profile for bash or source $HOME/.zprofile to load the config into your current shell.
STEP3
Verify that ANDROID_SDK_ROOT has been set by running echo $ANDROID_SDK_ROOT and the appropriate directories have been added to your path by running echo $PATH.

結論:簡單的整理一下設定環境變數時會用到的 export, source, echo,也引用一句話~在 Linux 的環境下,如果你不懂 bash 是什麼,那麼其他的東西就不用學了

參考文章:

認識與學習BASH
Linux环境变量配置全攻略

@gracekrcx
Copy link
Owner Author

什麼是『子程序』呢?就是說,在我目前這個 shell 的情況下,去啟用另一個新的 shell ,新的那個 shell 就是子程序啦!在一般的狀態下,父程序的自訂變數是無法在子程序內使用的。但是透過 export 將變數變成環境變數後,就能夠在子程序底下應用了!

@gracekrcx
Copy link
Owner Author

環境變數

  • 簡單來說,變數就是一個容器,裝著某些資料,而環境變數則是『無時無刻』都存在系統的背景環境中的一個容器,可以讓我們去存取裝在容器裡面的資料。

  • 環境變數中的 PATH,代表著「系統要到哪些路徑底下找執行檔」。

@gracekrcx
Copy link
Owner Author

gracekrcx commented May 30, 2022

Process
The process object is a global that provides information about, and control over, the current Node.js process. As a global, it is always available to Node.js applications without using require().
process.env
在 NodeJS 裡拿環境變數的方式

Example:

process.env.TEST = 1;
console.log(process.env.test);
// => 1

可以在執行時,設定環境變數
(設定環境變數 PORT, NDOE_DEV)

PROT=3001 node index.js
PROT=3002 NDOE_DEV=development node index.js

@gracekrcx
Copy link
Owner Author

Heroku dynamic port for your app to bind to.

  • If the dyno is a web dyno, the $PORT variable will be set. The dyno must bind to this port number to receive incoming requests.
  • Using process.env.PORT
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Our app is running on port ${ PORT }`);
});

Why is my Node.js app crashing with an R10 error?

@gracekrcx
Copy link
Owner Author

bash
shell
commond line

@gracekrcx
Copy link
Owner Author

Course overview + the shell

  • When you run commands in your shell, you are really writing a small bit of code that your shell interprets.
    當你在 shell 中執行命令時,你實際上是在寫一小段程式碼,由 shell 來解釋執行

  • If the shell is asked to execute a command that doesn’t match one of its programming keywords, it consults an environment variable called $PATH that lists which directories the shell should search for programs when it is given a command:
    如果 shell 被要求執行一個不符合其程式設計關鍵字的命令時,它會查詢一個名為 $PATH 的環境變數,這個變數列出了當 shell 收到一個 command 時應該在哪些目錄中搜尋 programs:

命令執行過程:

  • 當你輸入一個命令時,shell 首先檢查它是否是內建的程式設計關鍵字。
  • 如果不是,shell 會嘗試將它視為一個外部程式來執行。

$PATH 環境變數:

  • 這是一個特殊的環境變數,它告訴 shell 在哪些目錄中尋找可執行程式。
  • 當你輸入一個命令時,shell 會在 $PATH 列出的目錄中搜尋對應的程式。
  • 這解釋了為什麼你可以直接輸入 date 或 echo,而不需要指定它們的完整路徑。 shell 會自動在 $PATH 中列出的目錄中尋找這些程式。

@gracekrcx
Copy link
Owner Author

.:表示當前目錄

..:表示父目錄

cd ./homecd home 效果是一樣的
所以
cd missingcd ./missing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant