Input J脚本中的输入字符串挂起

Input J脚本中的输入字符串挂起,input,stdin,readline,j,Input,Stdin,Readline,J,我使用#为linux用J编写脚本 但是脚本挂起了。在Control-D脚本回显输入的值之后。但正常的回车只会将光标放在新行上 #!/path/jconsole a =. 1!:1]3 echo a exit '' 问题是(1!:1)&3一直读取到“文件结束”。在Linux中,按ctrl-D键发送EOF信号 如果这不是你想要的,恐怕除了你的“丑恶伎俩”没有别的了 由于(1!:1)&1仅在会话期间因某种原因起作用…当j处于脚本模式时,您无法读取一行文本,但您可以通过使用9!设置immex短语,安

我使用#为linux用J编写脚本

但是脚本挂起了。在Control-D脚本回显输入的值之后。但正常的回车只会将光标放在新行上

#!/path/jconsole

a =. 1!:1]3
echo a
exit ''
问题是
(1!:1)&3
一直读取到“文件结束”。在Linux中,按ctrl-D键发送EOF信号

如果这不是你想要的,恐怕除了你的“丑恶伎俩”没有别的了


由于(1!:1)&1仅在会话期间因某种原因起作用…

当j处于脚本模式时,您无法读取一行文本,但您可以通过使用
9!设置immex短语,安排在下次j返回立即执行模式时运行某些内容:27然后使用
9!将immex位设置为1:29
。下面是一个例子:

#!/usr/bin/env j

NB. demo showing how to make a simple repl in j.

readln =: [: (1!:01) 1:
donext =: [: (9!:29) 1: [ 9!:27

main =: verb define
  echo ''
  echo 'main loop. type ''bye'' to exit.'
  echo '--------------------------------'
  while. (s:'`bye') ~: s:<input=:readln'' do.
    echo ".input
  end.
  echo '--------------------------------'
  echo 'loop complete. returning to j.'
  NB. or put (  exit'' ) here to exit j.
)

donext 'main _'
#/usr/bin/env j
注意。演示如何在j。
readln=:[:(1!:01)1:
donext=:[:(9!:29)1:[9!:27
main=:动词定义
回声“
echo'主循环。键入“bye”退出
回声'--------------------------------------'

while.(s:''bye')~:s:我发现了一个难看的把戏:
a=.shell'read foo;echo-n$foo'
你有没有建议阅读单个键,而不是一行关于输入?例如,如果我正在用J制作一个基于控制台的俄罗斯方块,我将如何实时读取箭头键?好吧,你可以包装一个小的c/pascal/rust/go/Whatch*。因此,这个文件为你提供了终端IO,但一旦你使用另一种语言,你可能最好还是编写一个新的J前端(在事件循环中调用J引擎的顶级程序)或者类似rlwrap的东西。下面是我在rlwrap过程中做的一些事情:
#!/usr/bin/env j

NB. demo showing how to make a simple repl in j.

readln =: [: (1!:01) 1:
donext =: [: (9!:29) 1: [ 9!:27

main =: verb define
  echo ''
  echo 'main loop. type ''bye'' to exit.'
  echo '--------------------------------'
  while. (s:'`bye') ~: s:<input=:readln'' do.
    echo ".input
  end.
  echo '--------------------------------'
  echo 'loop complete. returning to j.'
  NB. or put (  exit'' ) here to exit j.
)

donext 'main _'