关于 shell 下的 sleep 问题

2019-06-01 14:15:49 +08:00
 different

最近遇到下面这个问题,可能表达的不是很清楚。。 tasklist.txt 文件里面就只有三行

1

2

3

下面代码输出

1

(只循环了一次)

#! /bin/bash

cat tasklist.txt | while read lines

do

echo $lines

cd /media/ice/0A9AD66165F33762/magnet_data/2019/修改 alpha/changeAlpha/runInMyComputer/80K/alpha0.01/50fs/80_1200

mpirun -np 1 ./bin/ASDMPI cff &

sleep 1

done

echo "end..............."

下面代码输出

1

2

3

(循环了三次)

#! /bin/bash

cat tasklist.txt | while read lines

do

echo $lines

cd /media/ice/0A9AD66165F33762/magnet_data/2019/修改 alpha/changeAlpha/runInMyComputer/80K/alpha0.01/50fs/80_1200

mpirun -np 1 ./bin/ASDMPI cff &

done

echo "end..............."

在我的电脑下有问题,在另一台电脑下没问题,奇怪了 这是何解??郁闷了

4532 次点击
所在节点    Linux
31 条回复
different
2019-06-02 10:13:32 +08:00
@Kobayashi 啊哈,感谢感谢,还有个疑问,如果 ASDMPI 这个程序能吃掉 stdin 的内容,为何这种问题只存在某些 Linux 发行版里面?我的 Ubuntu18.04 有问题,centos6.4 没问题,。。
Kobayashi
2019-06-02 10:29:00 +08:00
@different 你两次贴的内容并不一样,后者没有 sleep 1。while read 可能和 ASDMPI 程序存在资源竞争,在外层循环语句 sleep 时,标准输入 stdin 被 ASDMPI 拿了?目前只能这样推测。
ps1aniuge
2019-06-02 12:37:04 +08:00
shell 坑太多,一条 sleep 就把 shell 打 懵逼了!
bash 已死,powershell 是脚本人的未来。

请让我安利下 linux 版 powershell,谢谢:
问:powershell 啥时候开源(+免费)的?
答:
2015 年小范围内部开源,2016 年开发者大会上,正式法律开源。



问:开源后的 powershell,属于谁的财产?
答:
在遵守其开源协议的前提下。powershell 开源后。属于 [社区财产] 或 [任何人财产] 。



问:谁是 powershell 开源免费的最大受益者?
答:
powershell 可以运行在,win,mac,ubuntu1404+,centos7,debian8+,suse12+,arch,alpine linux,树莓派 Raspbian,win10-iot,docker,snap-app,open-wrt 路由器等。
这些系统使用者,是 powershell 开源免费的最大受益者。



问:powershell 完全开源了么?
答:
不完全是。
1 powershell 之所以简单、强大、好用。靠的是 powershell5.1+win 自带的 powershell 库。我们应该主要使用这些库。
这些库,并没有开源。开源之前,是否免费我也不清楚。
2 powershell6,powershell7,和相关的库,开源了。
这里面的区别主要是 [win 自带软件,相关的 powershell 库] 。
库数量很多,如 iis 的 ps 库。但这些 win 独有软件的 ps 库,跨不了平台。即便开源给 liux 也并没啥用。
另外一些 win,linux 通用的 ps 库,比如 sqlserver 的 powershell 库,已经开源免费放在了 github 和 powershell 画廊。


问:如何看待 bash,及 linux shell 脚本将来的地位,命运?
问:powershell 在 linux 中的前景如何?
答:
就好像 [气泵射钉枪] 必将取代 [锤子] 一样,先进生产力必然代替落后的。
就好像面向对象的 powershell,必然取代面向字符的 bat 那样。
powershell 发展成熟后。以 bat,bash 为代表的,上一代面向字符串的脚本语言,面向字符串的命令,难免被边缘化。
过几年后,开机启动脚本,特简单的脚本中,或许还残留有 bat,bash,字符串命令的身影。
qinghon
2019-06-02 16:08:09 +08:00
@ps1aniuge 气泵射钉枪至今没有取代锤子的地位
面向对象的 c++至今没有取代面向函数的 c 的地位
different
2019-06-02 17:27:26 +08:00
@Kobayashi
一开始贴的内容有点乱。。。
单纯看附言里面的内容的话,
附言里面的两份代码均有 sleep
但是在另一台机器( centos 6.4 )上测试
均输出
1
nohup: appending output to 'nohup.out'
2
nohup: appending output to 'nohup.out'
3
nohup: appending output to 'nohup.out'

而我的机器并不是。
Kobayashi
2019-06-03 07:49:04 +08:00
@different 这我就说不清了,无能为力。
different
2019-06-03 12:17:11 +08:00
@Kobayashi 没事,已经非常感谢了。
james122333
2019-06-03 15:20:40 +08:00
#!/bin/bash
while read -r line
do
echo $line
(mpirun -np 1 ~/bin/test &) &
sleep 1
done < tasklist.txt
wait
echo "end..............."
james122333
2019-06-03 15:26:10 +08:00
打错
james122333
2019-06-03 15:31:25 +08:00
#!/bin/bash
while read -r line
do
echo $line
(mpirun -np 1 ~/bin/test & wait) &
sleep 1
done < tasklist.txt
wait
echo "end..............."
james122333
2019-06-03 16:13:19 +08:00
或者 mpirun 加上一个参数--stdin none
会导向 stdin 的程序 有点恶心 不太好用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/569731

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX