小编rle*_*ber的帖子

有没有办法设置$的值?在Ruby中的模拟?

我正在测试一些与系统命令接口的脚本.它们的逻辑取决于系统命令的返回码,即$?的值.因此,作为简化示例,脚本可能会说:

def foo(command)
  output=`#{command}`
  if $?==0
    'succeeded'
  else
    'failed'
  end
end
Run Code Online (Sandbox Code Playgroud)

为了能够正确地测试这些方法,我希望能够发出内核反引号调用,并设置$?到一个任意值,看看在反引号调用后我是否从方法中的逻辑得到了适当的行为.$?是一个只读变量,因此以下不起作用:

$? = some_number
Run Code Online (Sandbox Code Playgroud)

我可以做一些简单的事情:例如,设置$?为零或非零.例如,将设置$?到0或35212(在我的系统上,无论如何),取决于$?的值:

def fail_or_succeed(success)
  if success
    `echo foo`
  else
    `a-non-existent-command 2>&1`
  end
end
Run Code Online (Sandbox Code Playgroud)

我真正想要做的是设置$?到特定值(例如3或122),不仅是零或任意非零.我无法想办法做到这一点.(如果重要的话,我正在使用Test :: Unit和Mocha进行测试.)

ruby testing mocha.js

8
推荐指数
1
解决办法
1465
查看次数

如何使用ANSI转义序列捕获bash中终端窗口的标题?

我在OSX中使用bash命令行.我知道ANSI转义序列\ 033 [21t将检索当前终端窗口的标题.所以,例如:

$ echo -ne "\033[21t"
...sandbox... 
$ # Where "sandbox" is the title of the current terminal window
$ # and the ... are some extra control characters
Run Code Online (Sandbox Code Playgroud)

我想要做的是在脚本中以编程方式捕获此信息,但我无法弄清楚如何做到这一点.脚本只捕获原始ANSI转义序列.所以,举一个例子,这个小Ruby脚本:

cmd = 'echo -ne "\033[21t"'
puts "Output from echo (directly to terminal):"
system(cmd)
terminal_name=`#{cmd}`
puts "\nOutput from echo to variable:"
puts terminal_name.inspect
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

Output from echo (directly to terminal):
^[]lsandbox^[\
Output from echo to variable:
"\e[21t"
Run Code Online (Sandbox Code Playgroud)

我希望第二种情况下的信息与终端上显示的信息相匹配,但我得到的只是原始命令序列.(我已尝试使用system()并将输出捕获到文件中 - 这也不起作用.)有没有人知道如何使其工作?

ruby terminal

5
推荐指数
1
解决办法
1713
查看次数

标签 统计

ruby ×2

mocha.js ×1

terminal ×1

testing ×1