bash --norc falhou quando eu quero meu script de teste com saída limpa

0

Eu quero que meu script de teste possa ser executado sem os scripts de inicialização inicial.

Eu encontrei a opção "--norc" não pode funcionar. A versão bash é 4.2.0 (2)

meu ~ / .bashrc contém

echo "in .bashrc"

Eu quero bash --norc -x test.sh produz um conteúdo sem .bashrc.

$ touch test.sh
$ bash -x test.sh
+ echo 'in .bashrc'
in .bashrc

$ bash --norc -x test.sh
+ echo 'in .bashrc'
in .bashrc

Eu encontrei este problema só ocorre no meu sistema embarcado. O verdadeiro Linux não tem esse problema.

    
por Daniel YC Lin 15.02.2013 / 04:38

2 respostas

1

Como mencionei no meu comentário, os shells não interativos não devem ler .bashrc . Sua pergunta não deveria ser "Por que --norc não está funcionando?"; sua pergunta deve ser “Por que este script de shell (shell não interativo) está lendo .bashrc em primeiro lugar?”. Uma possibilidade é que você tenha uma variável de ambiente BASH_ENV definida como ~/.bashrc . Se não é isso, eu não sei, mas aqui estão algumas coisas que você pode tentar:

  • Se o seu script não estiver fazendo nada bash -específico, tente executá-lo com sh ; ou seja, sh -x test.sh .
  • Crie um arquivo testrc com echo e diga bash -–rcfile testrc -x test.sh .
  • Diga bash -–rcfile /dev/null -x test.sh .
  • Qualquer e todos os itens acima sem -x . (Isso não deve fazer diferença, mas esse problema já não faz sentido.)
  • Execute o script como um programa normal: chmod +x test.sh e, em seguida, apenas test.sh (ou ./test.sh , se você não tiver . em seu caminho de pesquisa). (Você precisará ter #!/bin/bash , #!/bin/sh , #!/usr/bin/env bash ou algo equivalente como a primeira linha de test.sh , mas essa é uma boa prática de qualquer maneira - veja discussão de Grawity .) (Mas isso também não deve fazer diferença.)
  • E realmente, você deve fazer isso primeiro, mas eu não queria incomodar você e fazer você ignorar o resto da minha resposta: certifique-se de que o problema é o que você diz ser. Verifique, verifique e verifique três vezes test.sh para qualquer comando source ou . que possa (talvez indiretamente) extrair .bashrc . Da mesma forma, veja se ele chama qualquer outro script que possa estar fazendo isso. Verifique se a mensagem in .bashrc está realmente vindo de .bashrc - tente renomear .bashrc (por exemplo, para .bashrc.hold , ou o que for) e / ou chmod ing para 0 e tente novamente.
por 15.02.2013 / 20:05
1

--norc só se aplica a shells interativos; você está iniciando um shell não interativo fornecendo o argumento test.sh . Tente adicionar também o sinalizador -i para forçar um shell interativo. (Nota: isso pode deixá-lo no novo shell após test.sh concluir; não testei).

    
por 15.02.2013 / 18:37

Tags