Command-Line

命令行參數(例如’some.text’)實際傳遞到哪裡?

  • July 20, 2012

據我所知,您傳遞給命令的參數會進入它的 STDIN 流。

所以這:

cut -d. -f2 'some.text'

應該與此完全相同:

echo 'some.text' | cut -d. -f2

當我們發送some.text到標準輸入時。在第一種情況下通過參數,在第二種情況下通過管道。

some.text如果不是 STDIN,第一個樣本中的參數會去哪裡?

不,通過命令行傳遞的參數不會自動傳遞給 STDIN,而是以單獨的變數形式提供給程序,然後程序可以根據需要解釋它們。這些變數通常稱為 argc 和 argv。

許多 Unix 工具(cut、head、tail、cat…)可以通過 STDIN 或通過命令行中的文件輸入。

所以echo 'some.text' | cut -d. -f2有同樣的效果

echo 'some.text' > temporary_file
cut -d. -f2 temporary_file
rm temporary_file

命令行參數和程序輸入完全不同。它們不會通過相同的路線旅行,並且對它們的解釋也不同。

該命令將以選項cut開頭的參數解釋-為輸入文件名(與許多其他命令一樣)。

參數通過execve系統呼叫傳遞給程序。環境在它旁邊傳遞。程序可以從記憶體中的某個位置讀取它的參數;程式語言通常提供變數或函式來訪問參數,例如C中argv參數main

標準輸入是文件描述符0。按照慣例,這是程序可以讀取的預先打開的文件。當您在終端上執行命令而不重定向其輸入時,標準輸入來自終端(這是您鍵入的內容)。當您使用 重定向來自文件的輸入時mycommand <input_file,標準輸入將連接到該文件。當您在管道中執行命令時command1 | command2,標準輸入command2連接到標準輸入command2

引用自:https://unix.stackexchange.com/questions/43489