“Não é possível abrir” um arquivo / opt

3

Este é meu primeiro post. Eu queria pedir alguma ideia para resolver o meu problema. Estou usando o Ubuntu 12.04 LTS e meu objetivo é usar o software OpenFoam CFD.

Estou tentando executar um script chamado Allrun que corresponde a um tutorial. Eu estou usando o comando sudo assim.

sudo ./Allrun

em seguida, ele solicita minha senha e, depois de apresentá-la, aparece de repente uma mensagem dizendo:

./Allrun: 5: .: Can't open /bin/tools/RunFunctions

Este caminho aparece na linha 5 como originado no script, assim como:

. $WM_PROJECT_DIR/bin/tools/RunFunctions

sendo $ WM_PROJECT_DIR uma variável definida em opt / openfoam22 / etc / bashrc e apontando o diretório:

$WM_PROJECT_DIR= /opt/openfoam222

(este bashrc é ao mesmo tempo originado no arquivo ~ / .bashrc, e eu posso usar a variável no terminal, então eu suponho que tudo está bem)

Eu também tentei chmod o arquivo RunFunctions com permissões rwx, e mudei com "ls -la" que suas permissões mudaram (eles fizeram), mas não resolveu nada.

Sou novo no linux e qualquer ajuda será ótima, obrigado antecipadamente.

    
por Danubi 21.11.2013 / 19:43

1 resposta

0

Parece que no ponto de execução, a variável não está definida; o script procura um arquivo /bin/tools/RunFunctions/ , não /opt/openfoam222/bin/tools/RunFunctions .

Repare que projéteis não interativos não carrega .bashrc por padrão , portanto, o fato de a variável ser definida quando você a utiliza em interativo não é uma prova. Mesmo se você estiver executando o script do shell, as variáveis não serão exportadas para o sub-shell por padrão, elas precisam ser declaradas export para fazer isso.

Tente adicionar uma linha como

echo "DEBUG variable is $WM_PROJECT_DIR"

antes da linha com falha em ./Allrun e verifique a saída. Se esse for o problema, você deverá fornecer explicitamente o arquivo em seu script. Ou adicione um

export WM_PROJECT_DIR 

para passá-lo para subshells.

Adicionado (após comentários). Note que você não deve explicitamente originar seu .bashrc no seu .profile (eles têm um significado diferente e o shell os origina em diferentes ocasiões, veja por exemplo aqui .)

Os scripts (não interativos) nunca devem confiar em seu shell de login para serem executados. Se eles precisarem de arquivos / definições específicos, devem source explicitamente. Para o que você sabe, ele pode ser chamado até mesmo de um tipo diferente de shell ou de nenhum shell.

    
por Rmano 21.11.2013 / 20:10