有没有办法在不退出整个 pry 会话的情况下停止长 运行 命令?
Is there a way to stop a long running command without exiting out of the whole pry session?
我想要一些东西来停止 Pry 命令,但我不想退出 shell。
Control+C 不是我要找的。我不是要退出循环或退出整个会话。如果我 运行 一行需要很长时间的代码,我只是想 return 到 Pry 提示。
如果您从命令行启动 Pry(即仅通过 运行 pry
),这是可能的,但如果您在另一个 binding.pry
中,则可能不会过程。
如果您直接启动 Pry,它会设置信号处理程序并将捕获 Control+C 到 return REPL。 IRB 做同样的事情,这取决于它的 ignore_sigint
设置。
但是,如果您 运行 在另一个进程中,则该进程可能已经设置了自己的信号处理程序。例如,rspec
和 rails s
都监视 Control+C 以执行正常关闭。尝试在其中一个进程中停止命令实际上会使 Pry 保持打开状态,但会执行进程的关闭工作,因此一旦退出 Pry,就会转回命令行。
您可以在您的 Pry 会话中设置您自己的信号处理程序,例如:
Signal.trap('SIGINT') { puts 'Trapped' }
您可以在那里做一些非常聪明的事情来将执行移回 Pry REPL,但几乎可以肯定会对可能存在的其他处理程序造成严重破坏。
我想要一些东西来停止 Pry 命令,但我不想退出 shell。
Control+C 不是我要找的。我不是要退出循环或退出整个会话。如果我 运行 一行需要很长时间的代码,我只是想 return 到 Pry 提示。
如果您从命令行启动 Pry(即仅通过 运行 pry
),这是可能的,但如果您在另一个 binding.pry
中,则可能不会过程。
如果您直接启动 Pry,它会设置信号处理程序并将捕获 Control+C 到 return REPL。 IRB 做同样的事情,这取决于它的 ignore_sigint
设置。
但是,如果您 运行 在另一个进程中,则该进程可能已经设置了自己的信号处理程序。例如,rspec
和 rails s
都监视 Control+C 以执行正常关闭。尝试在其中一个进程中停止命令实际上会使 Pry 保持打开状态,但会执行进程的关闭工作,因此一旦退出 Pry,就会转回命令行。
您可以在您的 Pry 会话中设置您自己的信号处理程序,例如:
Signal.trap('SIGINT') { puts 'Trapped' }
您可以在那里做一些非常聪明的事情来将执行移回 Pry REPL,但几乎可以肯定会对可能存在的其他处理程序造成严重破坏。