Je veux que mon script de test puisse être exécuté sans les scripts de démarrage initiaux.
J'ai trouvé l'option "--norc" ne peut pas fonctionner. La version bash est la version 4.2.0 (2)
mon ~ / .bashrc contient
echo "in .bashrc"
Je veux bash --norc -x test.sh produire un contenu sans .bashrc.
$ touch test.sh
$ bash -x test.sh
+ echo 'in .bashrc'
in .bashrc
$ bash --norc -x test.sh
+ echo 'in .bashrc'
in .bashrc
J'ai trouvé que ce problème ne se produit que sur mon système embarqué. Le vrai Linux n'a pas un tel problème.
Réponses:
Comme je l'ai mentionné dans mon commentaire, les coquilles non interactives ne sont pas censées lire
.bashrc
du tout. Votre question ne devrait donc pas être «Pourquoi--norc
ne fonctionne- t-il pas? votre question devrait être "Pourquoi ce script shell ( shell non interactif) est-il lu.bashrc
en premier lieu?". Une possibilité est que vous ayez uneBASH_ENV
variable d'environnement définie sur~/.bashrc
. Si ce n'est pas ça, je ne sais pas, mais voici certaines choses que vous voudrez peut-être essayer:bash
spécifique, essayez de l'exécuter avecsh
; c'est à diresh -x test.sh
.testrc
fichier avec un fichierecho
dedans et ditesbash -–rcfile testrc -x test.sh
.bash -–rcfile /dev/null -x test.sh
.-x
. (Cela ne devrait pas faire une différence, mais ce problème n'a déjà aucun sens.)chmod +x test.sh
et puis justetest.sh
(ou./test.sh
, si vous n'avez pas.
dans votre chemin de recherche). (Vous aurez besoin d'avoir#!/bin/bash
,#!/bin/sh
,#!/usr/bin/env bash
ou quelque chose d' équivalent que la première lignetest.sh
, mais c'est une bonne pratique de toute façon - voir la discussion grawity .) (Mais cela ne devrait pas faire une différence, non plus .)test.sh
pour toutsource
ou des.
commandes qui pourraient (peut - être indirectement) tirer dans.bashrc
. De même, voyez s'il appelle d'autres scripts susceptibles de le faire. Vérifiez que lein .bashrc
message provient réellement de.bashrc
–– essayez de le renommer.bashrc
(par exemple, en.bashrc.hold
ou autre) et / ou de lechmod
renvoyer à 0, puis réessayez.la source
--norc
s'applique uniquement aux coques interactives; vous démarrez un shell non interactif en fournissant l'test.sh
argument. Essayez également d’ajouter le-i
drapeau pour forcer un shell interactif. (Remarque: ceci peut vous laisser dans le nouveau shell après avoirtest.sh
terminé; je n'ai pas testé.)la source
--norc
ne s'applique qu'aux coques interactives, c'est que les coques non interactives ne sont pas censées lire.bashrc
du tout. Bien sûr, j'aimerais savoir si le fait de spécifier-i
résoud le problème, mais cela semble être une façon particulière d'essayer.