GVKun编程网logo

如何确定Ruby脚本的shell执行上下文?(ruby shell)

19

对于想了解如何确定Ruby脚本的shell执行上下文?的读者,本文将提供新的信息,我们将详细介绍rubyshell,并且为您提供关于03.函数高级-执行上下文与执行上下文栈、bash–我如何默认为Je

对于想了解如何确定Ruby脚本的shell执行上下文?的读者,本文将提供新的信息,我们将详细介绍ruby shell,并且为您提供关于03. 函数高级-执行上下文与执行上下文栈、bash – 我如何默认为Jenkins shell执行的登录shell、bash – 我的shell脚本如何确定它是否在真正的shell中?、java – 在嵌入式JRuby中执行Ruby脚本时,可以使用gem吗?的有价值信息。

本文目录一览:

如何确定Ruby脚本的shell执行上下文?(ruby shell)

如何确定Ruby脚本的shell执行上下文?(ruby shell)

有没有办法通过编程确定是否从Windows DOS shell,Linux bash shell等运行Ruby脚本?

我试图在支持它的任何控制台上发出ANSI颜色代码。 我已经使用了术语-aicolor gem以及win32console来将ANSI颜色代码翻译成本地Windows命令行颜色序列。 但是,我发现这个解决scheme很片断。

我只想在支持ANSI的控制台上发出ANSI(注意,这个脚本是在Windows和Linux上用各种不同的第三方shell运行的)。

这个堆栈溢出答案中2> nul的目的是什么?

FTYPE / ASSOC优先级,并从命令行添加到OpenWithList

目录 – 列出除了一些之外的所有文件夹

findstr.exe不能正常工作

Windows命令行:用活动进程打开文件?

如何在Windows中使用本地path访问Subversion存储库?

在Windows上运行/启动MysqL而不安装

编写rakefile在Windows中运行命令的最佳方法是什么?

在phing得到pid产生的exec

将PDF的内容打印到命令行

您可以使用父进程ID来确定从哪里开始。 您可以使用Process模块获取父进程ID。 但是要注意Process.ppid上的这个警告(在Win32 / 64上返回不值得信赖的值),你需要彻底地测试这个解决方案。 一旦你有了父进程ID,你可以在win32_process表上进行查询来获取进程的名字,并检查它的cmd.exe 。 下面的示例代码。

require 'win32ole' wmi = WIN32OLE.connect("winmgmts://") processes = wmi.ExecQuery("select * from win32_process where ProcessId = #{Process.ppid}") processes.each do |process| if process.Name == "cmd.exe" puts "started from command prompt. Do something" else puts "started from elsewhere. Do something else" end end

03. 函数高级-执行上下文与执行上下文栈

03. 函数高级-执行上下文与执行上下文栈

01. 变量提升与函数提升

1. 变量声明提升
* 通过var定义(声明)的变量, 在定义语句之前就可以访问到
* 值: undefined
2. 函数声明提升
* 通过function声明的函数, 在之前就可以直接调用
* 值: 函数定义(对象)
3. 问题: 变量提升和函数提升是如何产生的?

// 面试题: 输出什么?
var a = 4
function fn1() {
    console.log(a)
}
function fn2() {
    console.log(a)
    var a = 5
}
function fn3(a) {
    console.log(a)
}
function fn4(a) {
    console.log(a)
    var a = 5
}
fn1()  // 4
fn1(1) // 4
fn2()  // undefined
fn2(1) // undefined
fn3()  // undefined
fn3(1) // 1
fn4()  // undefined
fn4(1) // 1

/*变量提升*/
console.log(a1) //可以访问, 但值是undefined
var a1 = 3

/*函数提升*/
a2() // 可以直接调用
function a2() {
    console.log(''a2()'')
}

02. 执行上下文

1. 代码分类(位置)
* 全局代码
* 函数代码
2. 全局执行上下文
* 在执行全局代码前将window确定为全局执行上下文
* 对全局数据进行预处理
* var定义的全局变量==>undefined, 添加为window的属性
* function声明的全局函数==>赋值(fun), 添加为window的方法
* this==>赋值(window)
* 开始执行全局代码
3. 函数执行上下文
* 在调用函数, 准备执行函数体之前, 创建对应的函数执行上下文对象
* 对局部数据进行预处理
* 形参变量==>赋值(实参)==>添加为执行上下文的属性
* arguments==>赋值(实参列表), 添加为执行上下文的属性
* var定义的局部变量==>undefined, 添加为执行上下文的属性
* function声明的函数 ==>赋值(fun), 添加为执行上下文的方法
* this==>赋值(调用函数的对象)
* 开始执行函数体代码

console.log(a1)   // undefined
console.log(a2)   // undefined
console.log(a3)   // fun
// console.log(a4)   // error a4 is not defined
console.log(this) // window

var a1 = 3
var a2 = function () {
    console.log(''a2()'')
}
function a3() {
    console.log(''a3()'')
}
a4 = 4

function fn(x, y) {
    console.log(x, y)       // undefined undefined
    console.log(b1)         // undefined
    console.log(b2)         // fun
    console.log(arguments)  // arguments
    console.log(this)       // window
    // console.log(b3)         // error b3 is not defined
    var b1 = 5
    function b2 () {}
    b3 = 6
}
fn()

03. 执行上下文栈

1. 在全局代码执行前, JS引擎就会创建一个栈来存储管理所有的执行上下文对象
2. 在全局执行上下文(window)确定后, 将其添加到栈中(压栈)
3. 在函数执行上下文创建后, 将其添加到栈中(压栈)
4. 在当前函数执行完后,将栈顶的对象移除(出栈)
5. 当所有的代码执行完后, 栈中只剩下window

//1. 进入全局执行上下文
var a = 10
var bar = function (x) {
    var b = 5
    foo(x + b)              //3. 进入foo执行上下文
}
var foo = function (y) {
    var c = 5
    console.log(a + c + y)
}
bar(10)                    //2. 进入bar函数执行上下文

04. 执行上下文栈2

1. 依次输出什么?
2. 整个过程中产生了几个执行上下文?

console.log(''global begin: ''+ i) 
var i = 1
foo(1);
function foo(i) {
    if (i == 4) {
        return;
    }
    console.log(''foo() begin:'' + i);  
    foo(i + 1);                       
    console.log(''foo() end:'' + i);
}
console.log(''global end: '' + i);

// global begin: undefined
// foo() begin:1 
// foo() begin:2
// foo() begin:3
// foo() end:: 3
// foo() end:: 2
// foo() end:: 1
// global end: 1

05. 面试题

// 测试题1: 先预处理变量, 后预处理函数
function a() {}
var a;
console.log(typeof a) // function

// 测试题2: 变量预处理, in操作符
if (!(b in window)) {
    var b = 1;
}
console.log(b) // undefined

// 测试题3: 预处理, 顺序执行
var c = 1
function c(c) {
    console.log(c)
    var c = 3
}
c(2) // c is not a function

 

bash – 我如何默认为Jenkins shell执行的登录shell

bash – 我如何默认为Jenkins shell执行的登录shell

我想使用rvm(或rbenv / ch ruby)从Jenkins作业中选择不同的ruby版本.
默认情况下,Jenkins会使用/ bin / sh,它在Ubuntu上是破折号.

为了改变,我可以补充

#!/bin/bash -l

到每个shell的顶部执行函数到处都是.看到这是一个很烦人的工作,我想要能够把它放在某个地方.

使用“Shell可执行文件”配置设置,我可以让它运行bash,添加像“-l”这样的参数,但是会失败

“/bin/bash -l” -xe /tmp/hudson5660076222778817826.sh FATAL:
command execution Failed java.io.IOException: Cannot run program
“/bin/bash -l” (in directory
“/home/jenkins/jobs/workspace/rvm-test”): error=2,No such file or
directory

我尝试使用rvm插件的jenkins,但这甚至不安装在当前版本的版本.

有任何想法吗?

总结

以上是小编为你收集整理的bash – 我如何默认为Jenkins shell执行的登录shell全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

bash – 我的shell脚本如何确定它是否在真正的shell中?

bash – 我的shell脚本如何确定它是否在真正的shell中?

我有一个在我的个人终端和CI环境中运行的 shell脚本.在CI环境中,python调用确定shell高度/宽度返回有趣的值.

我想做一些事情的效果:

if (I am running in shell context)
    determine height/width of terminal
else
    don't
fi

如何在bash脚本中表达这种情况?

解决方法

检查标准输入是否为tty设备.

在sh / bash中:

if [ -t 0 ]; then

在Python中:

if os.isatty(sys.stdin):

java – 在嵌入式JRuby中执行Ruby脚本时,可以使用gem吗?

java – 在嵌入式JRuby中执行Ruby脚本时,可以使用gem吗?

碰巧我需要对这个 Ruby script进行单元测试.这是一个基于 Sinatra的Web应用程序,它使用了几个宝石.

我在Java方面比在Ruby方面有更多的经验,时间非常重要(优雅不是),所以我想我可能会更快,如果我在JUnit类中执行该脚本并模拟它所依赖的所有子系统(Web服务器),数据库).这样我就可以使用我的Java技能来测试Ruby系统.它就像你可以在一个Java程序中嵌入Ruby一样.

问题:我可以在嵌入式Ruby中使用gem,i.即创建一个可以在任何机器(Windows,Linux,Mac)上执行测试的Java程序,并且不需要我手动在其上安装几个宝石?如果有,怎么样?

注意:它们需要是真正的宝石,嘲笑都很好.

更新1(25.01.2017 13:14):一个明显的解决方案是将该脚本的逻辑提取到一个没有依赖项的单独的Ruby文件中.这可能是代码的80%.然后,即使没有宝石,我也可以测试该逻辑文件.

解决方法

我假设你正在使用JRuby.检查 this和 this.有了这个,你可以做相反的事情并在Jruby内部使用Junit.

关于如何确定Ruby脚本的shell执行上下文?ruby shell的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于03. 函数高级-执行上下文与执行上下文栈、bash – 我如何默认为Jenkins shell执行的登录shell、bash – 我的shell脚本如何确定它是否在真正的shell中?、java – 在嵌入式JRuby中执行Ruby脚本时,可以使用gem吗?等相关知识的信息别忘了在本站进行查找喔。

本文标签: