comment trouver un csh de script en bash pour définir l'environnement
Nous avons Oracle Solaris, et le shell par défaut de csh. Ainsi, le script de connexion définit la oracle_home, oracle_sid dans csh aussi. Mais je n'aime pas les csh et que vous voulez utiliser bash pour faire mon travail. Alors, comment à la source de la csh login script en bash?
e.g, la suivante est ce que dans le .cshrc fichier. Et quand utiliser bash, j'aimerais utiliser ces variables. Une façon est de copier les variables de nouveau et utiliser la commande bash, tels que l'export ORACLE_SID=TEST. Mais cela va nous obliger à conserver deux copies des fichiers. Et quand nous changeons le nom de base de données, ou de mettre à niveau la base de données, j'ai besoin de maintenir le bash de connexion fichier séparément. C'est agréable d'utiliser quelque chose comme
source .cshr de bash, mais il ne fonctionne pas.
setenv ORACLE_SID TEST setenv ORACLE_HOME /oracle/TEST/home/produits/10204 setenv EPC_DISABLED VRAI setenv MANPATH /usr/local/man:/usr/share/man setenv de l'ÉDITEUR vi setenv LD_LIBRARY_PATH $ORACLE_HOME/lib:/usr/sfw/lib/64 setenv NLS_LANG AMERICAN_AMERICA.UTF8 setenv NLS_DATE_FORMAT "DD-MON-RR"
- Plus approprié pour le Super-Utilisateur ou le Serveur Faute?
Vous devez vous connecter pour publier un commentaire.
Dans votre
~/.bashrc
(ou le premier de~/.bash_profile
,~/.bash_login
, et~/.profile
qui existe) de la source de ce script en utilisant quelque chose comme. ~/bin/sourcecsh
:Cette version élimine le mal
eval
:Edit:
Sans sourcing stdin:
sed
)... je dois avouer que je préfère encore ma version (assez similaires), principalement parce qu'elle maintient la liste des commandes dans un fichier pour plus tard, de dépannage ou de l'environnement de restauration, juste au cas où 🙂eval
.Je suis dans le même bateau. Un collègue m'a montré les éléments suivants:
Commencer dans bash, sans les trucs en thwe environnement:
Voici le fichier csh qui devient source avais:
Voici la commande:
Chercher à la sortie de csh
Et chercher à la sortie de la nouvelle shell bash
De quitter et de revenir à l'original shell bash
Note le echo $$ pour voir l'Id de processus, de sorte que nous pouvons voir qu'ils sont différents des shell processus.
Mon collègue utilise assez sur ce qu'il le met dans un alias, comme:
Malheureusement, j'ai trouvé que j'ai souvent besoin non seulement de la variable d'environnement de l'installation, mais aussi d'alias de l'installation, comme dans le paquet pour les modules http://modules.sourceforge.net/.
J'ai été en mesure d'automatiser cette "csh script source de recettes" à l'aide de Perl Attendre. Mais je n'ai pas été capable d'être aussi interactif que je le voudrais, à l'exception de ce qui précède.
Que diriez-vous simplement la définition d'une fonction appelée setenv, comme
et puis la recherche .cshrc fichier.
Quand je le faire en bash, je reçois
Dans votre bash
.profile
, vous pouvez effectuer les opérations suivantes:cat
. Bash ne pas utiliserset
de cette façon.export
peut prendre le nom de la variable et la cession de tous à la fois. Vous devez utiliser une version différente desed
car qui ressemble à la syntaxe de Perl. Vous avez besoin d'utiliser-r
ou échapper à l'parenthèses et les signes plus. Vous pouvez supprimer le fichier temporaire comme ceci:source /dev/stdin < <(sed 's/setenv\s\+\(\S\+\)\s\+\(.*\)$/export \1=\2/' .cshrc)
source /dev/stdin < <(sed 's/setenv\s\+\(\S\+\)\s\+\(.*\)$/export \1=\2/' .cshrc | tee $HOME/.env_from_csh)
Seule façon que je peux penser à faire il serait à la charge de csh et ensuite appeler bash à partir de ce nouveau shell. De cette façon, le csh a pu analyser ce fichier, puis le bash qu'il engendre n'héritent que de l'environnement en tant que bien.
(cat .cshrc; echo exec $SHELL) | csh
Pour quelque chose de petit, il est commun de maintenir deux scripts d'installation, un pour les poissons et dérivés, des coquillages, et un pour le csh et tcsh. Comme vous le mentionnez, qui crée le risque de les deux scripts de sortir de synchronisation -- sauf vous générer l'un de l'autre, ou de générer à la fois à partir d'une source commune.
Ce met à la charge du responsable du script de configuration(s), plutôt que sur chaque utilisateur qui a besoin de les utiliser.
Il y a un module disponible par lequel vous pouvez source même fichier où vous voulez dans le script perl. Et vous obtiendrez tous les chemins d'environnement disponibles dans votre fichier csh.
Passer par un peu de documentation pour son utilisation.
Juste d'avoir une "
#!/bin/tcsh
" ou une déclaration similaire disponible au début de la CSH script en conjonction avec rendre le script exécutable résolu le problème pour moi. Je pourrais appeler directement le script CSH à partir de bash dans ce cas.Comme un exemple, j'ai eu à exécuter des outils.csh à partir d'un script bash appelé setup.sh. J'ai fait quelque chose comme ça dans le script bash:
./tools.csh
définit les variables d'environnement, ils ne être visible à partir de l'appel de la coquille. Si les commandes qui dépend de ces variables d'environnement sont tous dans./tools.csh
, c'est ok.Trouver un fichier csh en bash ne fonctionnera pas. Vous pouvez modifier la valeur par défaut le shell de connexion de csh de bash si vous êtes plus à l'aise dans bash. Vous pouvez utiliser chsh ou un admin de le changer pour vous.