面向对象的shell for linux?

有没有类似于Linux的Linux(可能build立在Java,GObject或其自己的对象types/无)的Microsoft Powershell(一个构build在.NET框架上的面向对象的shell)?

编辑:特别是如果类似于bash或者powershell或者cmd等语法(=''standard''shell语法)

Solutions Collecting From Web of "面向对象的shell for linux?"

蟒蛇。 不要开玩笑

脚本语言是脚本语言,Python是一个非常好的,很多人觉得非常平易近人。

尽管这个问题相当古老,但我认为值得一提的是,在2016年8月,微软开发了Powershell开源和跨平台。 安装说明在github上。

https://github.com/PowerShell/PowerShell

Perl,Python和Ruby


好吧,我相信你已经知道了,但是有人不得不说。

Perl是最古老也是最受欢迎的。

如果你喜欢物体,你可能会喜欢Ruby。 它有一个由Smalltalk启发的精心制作的对象系统。

Python有这个很酷的基于块结构的缩进语法。

Unix是先进的脚本工具的金矿…

热线

NodeJS可以做到这一点,实际上它是下载中包含的示例之一。 以交互方式使用它,或者(可能更有用)在JavaScript中编写shell脚本。

例如:

 #!/usr/local/bin/node var sys = require('sys'), exec = require('child_process').exec; // Run `ls`: exec('ls -lh /usr', function(error, output, erroutput) { sys.print('output: ' + output); sys.print('erroutput: ' + erroutput); }); 

…但是这只是为你缓冲所有输出的高级界面等等。如果你喜欢,你可以得到更多的下来和肮脏。

NodeJS与正常情况有异步性,所以如果你想要一个“传统的”shell脚本,你可能会发现它不是一个好的匹配,因为它不会(就我所知,据我所知)提供了一个同步exec版本。 所以一系列特别的串行语句成为回调的一个练习:

 exec('first_command', function(error) { if (error != null) { exec('second_command', function(error) { if (error != null) { // .... } }); } }); 

…但是,当然,你可以创建一个函数来为你处理这个函数,并且需要(比如说)一系列的顺序语句来执行(然后通过Node的模块系统把它作为一个模块来安装)。 举个例子:

 #!/usr/local/bin/node var sys = require('sys'), exec = require('child_process').exec; execSeries([ 'ls -ld /usr', 'foobar', 'ls -ld /etc' ], {echo: true}, function(results) { sys.print("Done\n"); }); // ===> This would be in a module, not in the script itself <=== function execSeries(series, options, callback) { var index = 0, results = []; // Make 'options' optional if (!callback && typeof options === "function") { callback = options; options = undefined; } // Default options options = options || {}; // Go callNext(); function callNext() { if (index >= series.length) { // Done callback(results); } else { // Call the next one exec(series[index++], function(error, stdout, stderr) { // Record result results.push({error: error, stdout: stdout, stderr: stderr}); // Echo? if (options.echo) { if (error == null) { sys.print(stdout); } else { sys.print("Error: " + error + "\n"); } } // Stop on error? if (options.breakOnError && error != null) { // Yes, and there was an error; stop callback(results); } else { // No, continue callNext(); } }); } } } 

你应该重新思考为什么你认为你需要一个面向对象的shell。 也就是说,如果你设置了奇怪的shell,你不能用zoid出错 。 不同于我在这里看到的其他许多建议,它确实是一个壳。 另一方面,如果你不知道或不喜欢Perl,你可能不会高兴。

jq并不完全是一个面向对象的shell,但它提供了一些面向对象的shell可能具有的好处; 我用它和shell脚本一起完成这些任务。