2010-08-11 128 views
1

是否有任何提供腳本語言shell的軟件包或項目?我知道C程序員有csh,但不是說它主要是用於編程,而是用於導航和系統管理。我想知道是否有爲此目的倒過來的東西?即用戶登錄到主要用於編程然後進行導航的shell中(像ruby中的irb,但具有導航功能)?腳本語言shell?

+0

[Csh編程被認爲是有害的](http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/) – 2010-08-11 06:09:55

回答

4

如果你認爲csh(tcsh)是C程序員的話,我認爲你會誤解。它只是一個像bash或ash或短跑或ksh或zsh的外殼。

R語言提供了一個功能合理的內部環境,並具有保存/恢復「工作空間」(變量)的能力。

Python有一個內置的解釋器,就像Maxima和一些Lisp/Scheme版本,再加上你已經提到的irb。

您還可以查看vim或emacs作爲您正在討論的以程序員爲中心的shell類型;兩者都可以連接起來運行導航命令和系統管理員類型的東西,而不會讓你離開編輯器。

我認爲你的問題的真正答案是「強大的炮彈提供自己的腳本語言」。

0

CSH與C編程無關。它的功能與Bourne Shell相同,但使用不同的語法。

如果你想C解釋器,我建議使用cint,它是CERN's ROOT系統的一部分。但請記住,這對系統管理和導航毫無用處。

0

我敢肯定,有工作的一點點,你可以進一步延伸Devel::REPL(Perl的),以提供對GNU的coreutils,

1

系統導航(和管理任務)是不是編程一個非常不同的應用,它的很難找到一個既能兼顧效果的單殼。不過,我猜你實際上要求的是

  1. 讓您輕鬆地將一個文件的內容和進程,並與更靈巧操縱這些內容比你開始使用bash和殼標準的Unix工具。
  2. 此外,您需要方便地訪問一些用於移動文件和瀏覽文件系統的常規命令。

好消息是,標準腳本語言(例如Ruby,Perl)確實要做好#1,編寫/查找庫來執行#2任何這些語言都不難。

因爲Ruby是我所熟悉的,所以我將給你一個更具體的例子,說明如何使用Ruby來完成此操作。

要在Ruby中執行此操作,您需要使用irb(Ruby REPL)和FileUtils模塊,它是Ruby標準庫的一部分。

要做到這一點,開始irb,然後運行

require 'fileutils' 
include FileUtils 

(你可以把這個.irbrc,如果你想,但我不知道我會建議。)

這允許您通過簡單的Ruby語法訪問a number of the normal file manipulation commands。你可以自己運行其他的Ruby命令。要在系統上運行其他命令,您必須使用system來調用它們。

FileUtils不包含ls命令,因爲它並不真正用於交互式使用,因此您需要編寫自己的命令。我不知道一個辦法來控制好工作(但這並不是說你不能寫東西)。

我警告你的唯一的事情是,這個工作流程將是非常比其他UNIX用戶的不同,所以你可能要考慮是這樣一個不墨守成規是值得的,還是你寧願建立的經驗,目以及其他UNIX管理員的工作風格。習慣核心UNIX使用程序和Bourne shell腳本語言可能會更好。 (如果你願意,你可以學習C-Shell,但有一個知名的常見問題解釋the disadvantages of the C-shell for programming。)

+0

您應該花時間學習bash或zsh,然後再決定它們是什麼對於大部分時間你想做的事情來說都不夠強大。 – 2010-08-11 04:27:50

1

你可能想看看IPython。它是一個交互式的Python shell(帶有文件系統導航以及其他很好的功能),它還提供了一個system shell profile來優化其系統外殼使用的行爲。

0

Bash有很多通常不會被確認的編程功能,例如擴展shell變量時的數組和字符串操作選項。與最常見的shell(即bash或tcsh)相比,某些shell(如zsh或ksh)已大大改進了編程功能。

+1

我不認爲一點都不清楚ksh與Bash相比已經大大改進了編程功能。他們有很多共同點,他們每個人都有另一個缺乏的功能。 – 2010-08-11 06:11:48

1

Tcl的解釋程序tclsh實際上設計爲shell。實際上,與交互式和非交互式shell分離的Ruby不同,tclsh與傳統shell如bash一樣工作:如果在沒有腳本的情況下運行,它將進入交互模式,但是腳本會進入批處理模式。

但是,它確實吸引它沒有內置readline。因此,沒有向上箭頭史或製表符完成等,但你總是可以使用rlwrap運行:

rlwrap tclsh 

這應該給你的ReadLine能力。

但是,我並不滿意(部分原因是因爲我當時的系統沒有rlwrap,部分原因是我還需要更多功能)。所以我寫了自己的歷史記錄和製表符完成等實現。請檢查我原來的​​3210或改進的Pure-tcl readline2

如果tcl命令未知,它確實會像交互式shell一樣完成自動執行外部可執行文件。你甚至可以執行交互式程序,如vi,emacs或lynx。因爲它會自動回落到執行外部命令,你可以混合TCL和外殼,如:

foreach x [split [ps aux | grep apache] \n] { 
    puts [lindex $x 1] 
} 

,因爲TCL的語法更加健壯相比bash和SH這是偉大的(曾經試圖擺脫'"\"\\\\"\報價地獄抨擊?)。我個人喜歡tcl,但tcl是一種愛它或恨的語言。得到它的人真的很喜歡它,而那些並不真正討厭它的人。

但即使你不太喜歡tcl語法,我建議你試試這個特定的應用程序,因爲與其他語言不同,tcl確實被設計爲比編程語言更多地用作命令語言。由於一些原因,請閱讀I can’t believe I’m praising Tcl