Como gerar novos processos para novas instâncias do mesmo script de shell?

0

Estou tentando bloquear um arquivo usando o bloqueio de comando. Sua sintaxe é

./lock </path/to/file/name>

Eu preciso bloquear um monte de arquivos em um determinado diretório e, para conseguir isso, estou usando dois scripts:

  1. parent.sh
  2. child.sh

parent.sh chamará um processo child.sh para cada arquivo. Então, se eu precisar bloquear 9 arquivos, eu terei parent.sh spawn 9 child.sh , mas infelizmente isso não está acontecendo.

[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

Quando executo sh parent.sh , recebo o seguinte erro

[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

Como estou executando como root, não esperei nenhum problema de permissão aqui, mas é isso que estou vendo.

    
por Dhiwakar Ravikumar 31.08.2015 / 09:43

1 resposta

2

Linha 4 de parent.sh , você escreveu sh /child.sh & $f . O e comercial deve ser colocado no final do comando assim: sh /child.sh $f & .

No seu caso, você está tentando executar sh /child.sh em segundo plano, e então está executando $f em primeiro plano, o que levará a uma permissão negada, pois posso supor que seus arquivos /vol4/commit/file[1-9] não são executáveis.

Além disso, você pode querer observar que, se o arquivo estiver em somente leitura, talvez não seja possível editá-lo ou adquirir bloqueio de gravação, mesmo para o root.

    
por 31.08.2015 / 10:10