Docker交互式模式下如何粘贴多行命令而不逐行自动执行?
问题原因
该现象是Rails Console底层依赖的IRB交互环境的默认逻辑导致的:默认状态下IRB每接收一行带换行符的内容,就会自动判断当前行是否为符合Ruby语法的可执行独立语句,你需要粘贴的链式调用里
Order.last、.user本身都可作为独立语句执行,因此就会出现粘贴一行就自动执行一行的情况。
解决方案
方法1:临时开启粘贴模式(无需改配置,单次生效)
进入rails c后先输入paste命令开启粘贴模式,此时直接粘贴所有多行内容不会触发逐行执行,粘贴完成后按Ctrl + D结束粘贴状态,IRB会一次性执行整个代码块。
如果粘贴完成后不需要保留粘贴模式,也可以手动输入nopaste手动退出。
方法2:临时修改代码写法
如果只是偶尔需要粘贴多行链式调用,可以把整个代码块用括号包裹后再粘贴,IRB会判定括号未闭合前的所有内容都是同一个语句,不会逐行执行,示例写法:
(Order.last .user .id)
方法3:永久配置IRB禁用自动逐行执行
如果需要长期使用该环境,可直接修改IRB配置永久解决该问题:
- 进入容器对应用户的根目录,编辑
.irbrc文件,添加如下2行配置:
# 开启多行输入模式,关闭自动缩进避免误判独立语句 IRB.conf[:USE_MULTILINE] = true IRB.conf[:USE_AUTO_INDENT] = false
配置完成后保存退出,后续重新进入rails c就不会再出现多行粘贴自动逐行执行的问题。
内容的提问来源于stack exchange,提问作者Rockman12352
相关产品推荐
相关产品推荐

