![如何为同一 shell 脚本的新实例生成新进程?](https://linux22.com/image/71992/%E5%A6%82%E4%BD%95%E4%B8%BA%E5%90%8C%E4%B8%80%20shell%20%E8%84%9A%E6%9C%AC%E7%9A%84%E6%96%B0%E5%AE%9E%E4%BE%8B%E7%94%9F%E6%88%90%E6%96%B0%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我正在尝试使用命令 lock 锁定文件。它的语法是
./lock </path/to/file/name>
我需要锁定给定目录中的一堆文件,为了实现此目的,我使用两个脚本:
parent.sh
child.sh
parent.sh
child.sh
将为每个文件调用一个进程。因此,如果我需要锁定 9 个文件,我将parent.sh
生成 9 个文件child.sh
,但不幸的是这没有发生。
[root@localhost /]# cat parent.sh
#!/bin/ksh
for f in /vol4/commit/file[1-9]
do
sh /child.sh & $f
done
[root@localhost /]# cat child.sh
#!/bin/ksh
./lock $1
当我运行时sh parent.sh
,出现以下错误
[root@localhost /]# sh parent.sh
parent.sh: line 4: /vol4/commit/file1: Permission denied
parent.sh: line 4: /vol4/commit/file2: Permission denied
parent.sh: line 4: /vol4/commit/file3: Permission denied
parent.sh: line 4: /vol4/commit/file4: Permission denied
parent.sh: line 4: /vol4/commit/file5: Permission denied
parent.sh: line 4: /vol4/commit/file6: Permission denied
parent.sh: line 4: /vol4/commit/file7: Permission denied
parent.sh: line 4: /vol4/commit/file8: Permission denied
parent.sh: line 4: /vol4/commit/file9: Permission denied
由于我以 root 身份运行,所以我没想到这里会出现任何权限问题,但这就是我所看到的。
答案1
第 4 行parent.sh
,你写的sh /child.sh & $f
。必须将 & 符号放在命令末尾,如下所示:sh /child.sh $f &
。
在您的情况下,您尝试sh /child.sh
在后台运行,然后在前台执行$f
,这将导致权限被拒绝,因为我可以假设您的文件/vol4/commit/file[1-9]
不可执行。
另外,您可能需要注意,如果您的文件处于只读状态,您可能无法编辑它或获取写锁定,即使对于 root 也是如此。