2016-03-07 33 views
0

我目前正在學習UNIX並且一切正常。剛剛涵蓋了不同的shell,即Bourne SHell(sh),Bourne Again SHell(BASH)和Korn SHell(KSH)等,我明白進入不同的shell會通過命令向其他應用程序提供不同的功能。但是,我是什麼不清楚是什麼「切換」在UNIX操作系統時,說我從sh到ksh?它只是它在文件結構中的不同位置或什麼?在交換shell之後在UNIX操作系統中實際發生了什麼

+0

shell是什麼提供的功能。這並不像是有一些獨立的東西在底層使用了一個shell,並且決定了它使用的是哪個shell - 它直接提供了你輸入的提示符的shell本身。 –

+0

此外,「使其他應用程序的功能不同」簡直是錯誤的。應用程序不會調用調用它們的父shell;他們通常在他們想運行一個shell命令時調用'/ bin/sh',以及哪個shell根據用戶選擇的交互式shell而不會改變。 (在POSIX系統上運行'sh'應該是獲得符合POSIX標準的shell的保證,但POSIX sh,bash和ksh都符合POSIX標準.Bourne sh不符合POSIX標準 - 標準版本1991年出現,而Bourne從70年代開始 - 但沒有人再出貨伯恩了)。 –

+0

...因此,在你的問題中,'sh'是Bourne shell本身就是一個誤解;數十年來發布* Bourne的唯一操作系統供應商是Sun,並且他們終於停止了這一切;到處都是理智的,'/ bin/sh'就像灰或破折號,正確的符合POSIX sh,而不是Bourne。 –

回答

0

據我瞭解,進入不同的炮彈通過命令使不同功能的其他應用程序等

這是不正確。

你使用交互作爲用戶沒有軸承哪個shell應用程序使用,當他們使用system() C庫調用或任何等同於相同(其中精心編寫的應用程序在第一不做殼牌地點:最好的做法是直接調用exec-系列調用以在需要時啓動外部命令,而不是根本不使用臨時shell)。因此,用戶的交互式shell沒有機制選擇應用程序的行爲方式,因爲它實際上並沒有做出任何這樣的選擇。

當你的shell是,例如ksh,它是ksh提供你輸入的實際交互提示;將你輸入的命令與其別名,函數和內建函數進行比較,並找到要運行的外部命令,但是如果你傳遞了外部命令,那麼一旦該命令運行,它就不知道哪個shell會調用它(除非該信息以環境變量(例如$SHELL)的形式導出),並且不會基於此來更改其行爲。

+0

謝謝Charles。我立場糾正。我正在使用幾年前購買的培訓DVD。在繼續之前我會找到一個更新的培訓媒體 – AJF

+0

我建議http://wiki.bash-hackers.org/和http://mywiki.wooledge.org/BashGuide作爲關於bash的聲音信息的好地方特別是符合POSIX標準的shell。 –

相關問題