如何类似flock那样,但是不要求执行命令?

sh/bash/dash/ksh/zsh等Shell脚本
回复
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

如何类似flock那样,但是不要求执行命令?

#1

帖子 科学之子 » 2016-10-22 22:35

如何类似flock那样,但是不要求执行命令?

代码: 全选

#!/bin/bash
echo $0
flock $0 sh -c ''
bc
我试图这么写,但flock运行空命令后就直接释放了锁
此时如果此脚本再次运行,就不受到锁的保护
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 如何类似flock那样,但是不要求执行命令?

#2

帖子 自由建客 » 2016-10-22 22:39

代码: 全选

exec 4>"$LOCK_FILE"
flock -e 4  # 这里若是不能获取锁就会一直阻塞
...  # 做你想做的
flock -u 4
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 如何类似flock那样,但是不要求执行命令?

#3

帖子 自由建客 » 2016-10-22 22:43

叫你不看手册,我不懂洋文都看了
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 如何类似flock那样,但是不要求执行命令?

#4

帖子 科学之子 » 2016-10-23 1:45

自由建客 写了:叫你不看手册,我不懂洋文都看了
弱问看的是什么手册能得出exec这种用法?
这次我发帖前真看了手册,但当时没看懂那个number的意思 :Cry
看得是"man flock"
没看出exec这种用法
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 如何类似flock那样,但是不要求执行命令?

#5

帖子 自由建客 » 2016-10-23 9:33

科学之子 写了:
自由建客 写了:叫你不看手册,我不懂洋文都看了
弱问看的是什么手册能得出exec这种用法?
这次我发帖前真看了手册,但当时没看懂那个number的意思 :Cry
看得是"man flock"
没看出exec这种用法
number 是文件描述符,man flock 有说明。
exec 打开文件,这是 bash 的基本功。 :em06
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何类似flock那样,但是不要求执行命令?

#7

帖子 lilydjwg » 2019-04-23 12:29

科学之子 写了: 2018-11-26 11:00
自由建客 写了: 2016-10-22 22:39

代码: 全选

exec 4>"$LOCK_FILE"
flock -e 4  # 这里若是不能获取锁就会一直阻塞
...  # 做你想做的
flock -u 4
补充一下如何获取空闲的文件描述符:
https://stackoverflow.com/questions/416 ... or-in-bash
zsh 直接用变量作为文件描述符名称就不用纠结哪个可用了:

代码: 全选

exec {fd}<>$LOCK_FILE
flock -e $fd
头像
astolia
论坛版主
帖子: 6435
注册时间: 2008-09-18 13:11

Re: 如何类似flock那样,但是不要求执行命令?

#8

帖子 astolia » 2019-04-23 17:21

lilydjwg 写了: 2019-04-23 12:29
科学之子 写了: 2018-11-26 11:00 补充一下如何获取空闲的文件描述符:
https://stackoverflow.com/questions/416 ... or-in-bash
zsh 直接用变量作为文件描述符名称就不用纠结哪个可用了:

代码: 全选

exec {fd}<>$LOCK_FILE
flock -e $fd
bash也一样啊,你没看那个链接?

代码: 全选

exec {fd}>$LOCK_FILE
flock -e $fd
回复