Command-Line
命令行參數(例如’some.text’)實際傳遞到哪裡?
據我所知,您傳遞給命令的參數會進入它的 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
。