Shell while read循环+在while循环中创建一个进程
以下测试脚本有问题。当我在脚本中添加sleep5&行时,whileread循环不会从文件中读取所有行,而是只打印第一行 但是当我从脚本中删除sleep5&时,脚本会打印文件中定义的所有行 为什么睡眠会导致这种情况 如何解决这个问题?我想创建一个新的进程,睡眠只是while循环中的一个例子Shell while read循环+在while循环中创建一个进程,shell,unix,scripting,ksh,Shell,Unix,Scripting,Ksh,以下测试脚本有问题。当我在脚本中添加sleep5&行时,whileread循环不会从文件中读取所有行,而是只打印第一行 但是当我从脚本中删除sleep5&时,脚本会打印文件中定义的所有行 为什么睡眠会导致这种情况 如何解决这个问题?我想创建一个新的进程,睡眠只是while循环中的一个例子 $ more test #!/bin/ksh while read -r line ; do echo $line ( sleep 5 )& RESULT=$! sleep 1 kill $
$ more test
#!/bin/ksh
while read -r line ; do
echo $line
( sleep 5 )&
RESULT=$!
sleep 1
kill $RESULT
done < file
$ more file
123 aaa
234 bbb
556 ccc
您提供的代码运行并打印文件中的每一行 既然你不是在等待
( sleep 5 ) &
子进程,它对进程执行没有影响。这就是您编写的代码吗?您提供的代码运行并打印文件中的每一行 既然你不是在等待
( sleep 5 ) &
子进程,它对进程执行没有影响。这就是您编写的代码吗?这似乎是ksh特定版本中的错误。我从ksh 93s+中得到了相同的效果,但从bash、ash、pdksh、zsh或ksh 93t+中没有得到同样的效果。这似乎是ksh特定版本中的一个bug。我从ksh 93s+中获得了相同的效果,但不是从bash、ash、pdksh、zsh或ksh 93t+中获得的效果。此KornShell ksh脚本适用于此版本: echo$KSH_版本 @MIRBSD KSH R48 2013/08/16 soExample.ksh:
此KornShell ksh脚本适用于此版本: echo$KSH_版本 @MIRBSD KSH R48 2013/08/16 soExample.ksh:
您使用的是哪个版本的ksh?我没有在ksh93t+上看到它,就像Gilles提到的那样,您使用的是哪个版本的ksh?我没有像Gilles提到的那样在ksh93t+上看到它
user@foo /tmp
$ ksh soExample.ksh
Starting: /tmp/soExample.ksh with Input Parameters: {1: {2: {3:
Entering createFileWithInputHere
Exiting createFileWithInputHere
Entering readLine
123 aaa
234 bbb
556 ccc
Exiting readLine
Exiting: /tmp/soExample.ksh