【发布时间】:2015-01-04 19:00:09
【问题描述】:
我用#! 用 J for linux 编写脚本!
但脚本挂起。在 Control-D 脚本回显输入的值之后。但是普通的 ENTER 只会将光标放在新行上。
#!/path/jconsole
a =. 1!:1]3
echo a
exit ''
【问题讨论】:
-
我发现了丑陋的把戏:
a=. shell 'read foo; echo -n $foo'
我用#! 用 J for linux 编写脚本!
但脚本挂起。在 Control-D 脚本回显输入的值之后。但是普通的 ENTER 只会将光标放在新行上。
#!/path/jconsole
a =. 1!:1]3
echo a
exit ''
【问题讨论】:
a=. shell 'read foo; echo -n $foo'
当 j 处于脚本模式时,您无法读取单行文本,但您可以通过将 immex 短语设置为 9!:27 然后设置 immex 来安排在 j 下次返回立即执行模式时运行某些内容使用9!:29 位为 1。这是一个例子:
#!/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 _'
【讨论】:
问题是(1!:1)&3 一直读取到“文件结尾”。在 Linux 中,按 ctrl-D 会发送 EOF 信号。
如果这不是你要找的,恐怕除了你的“丑陋伎俩”别无他法
a=. shell 'read foo; echo -n $foo'
as (1!:1)&1 出于某种原因仅在会话期间有效...
【讨论】: