Como executar um comando shell embutido usando find?

2

Estou obrigado a fazer isso no tcsh no CentOS devido ao ambiente de trabalho. Ao executar find . -type f -executable -exec source '{}' \; , o único resultado será find: 'source': No such file or directory para cada arquivo apropriado. Não sei por que isso não está funcionando no tcsh, pois é bastante simples. O que estou fazendo de errado? Qualquer ajuda muito apreciada.

    
por roninkelt 13.01.2014 / 16:20

2 respostas

2

source é um shell embutido. find executa comandos. Não é possível executar um shell embutido.

Se você deseja executar programas externos, basta especificar o nome do programa:

find . -type f -executable -exec '{}' \;

Se todos esses scripts csh não tiverem shebang como ( #!/bin/env csh como a primeira linha) , adicione uma linha shebang. Se você realmente não pode adicionar uma linha shebang, chame o csh explicitamente:

find . -type f -executable -exec tcsh '{}' \;

Se esses são todos os fragmentos de script csh que você deseja executar dentro do shell atual, não é possível fazer isso dessa maneira. Você precisará coletar os nomes com find e, em seguida, fornecê-los.

foreach fragment ("'find . -type f -executable -print'")
  source "$fragment"
end

Há algo suspeito sobre esse requisito em primeiro lugar. Os fragmentos de shell destinados a serem originados não devem ser executáveis.

    
por 14.01.2014 / 00:12
-1

Veja isto:

127:2:1389633116:user@host:~$ tcsh source foo
source: No such file or directory.
1:3:1389633119:user@host:~$ tcsh
host:~> source foo
foo: No such file or directory.
host:~> exit
0:4:1389633582:user@host:~$ tcsh -c 'source foo'
foo: No such file or directory.

Tente você mesmo e outras pessoas. Talvez inspecionando strace traces. Por fim, tente aproveitar e criar uma solução alternativa.

    
por 13.01.2014 / 18:22