我正在创建一个bash脚本,它将在后台运行一个进程,从而创建一个套接字文件。然后套接字文件需要chmod
'd。我遇到的问题是在尝试chmod
文件之前没有创建套接字文件。
示例来源:
#!/bin/bash
# first create folder that will hold socket file
mkdir /tmp/myproc
# now run process in background that generates the socket file
node ../main.js &
# finally chmod the thing
chmod /tmp/myproc/*.sock
如何在创建套接字文件之前延迟chmod
的执行?
答案 0 :(得分:2)
我知道这样做的最简单方法是忙于等待文件出现。方便的是,ls
在要求列出的文件不存在时返回非零值;所以只需循环ls
直到它返回0,当它确实你知道你至少有一个*.sock
文件到chmod。
#!/bin/sh
echo -n "Waiting for socket to open.."
( while [ ! $(ls /tmp/myproc/*.sock) ]; do
echo -n "."
sleep 2
done ) 2> /dev/null
echo ". Found"
如果这是你需要做的不止一次将它包装在一个函数中,但除此之外应该做你需要的。
编辑:
正如评论中指出的那样,在测试中使用这样的ls不如-e,因此下面的重写脚本是首选。 (我还更正了shell调用,因为在仿真模式下所有平台都不支持-n。)
#!/bin/bash
echo -n "Waiting for socket to open.."
while [ ! -e /tmp/myproc/*.sock ]; do
echo -n "."
sleep 2
done
echo ". Found"
答案 1 :(得分:1)
在继续之前测试文件是否存在:
while [[ ! -e filename ]]
do
sleep 1
done
答案 2 :(得分:1)
如果您设置umask(尝试umask 0
),则根本不需要chmod。如果仍然没有获得正确的权限,请检查节点是否有更改权限的选项。