Question Exécuter tcsh avec un script de démarrage arbitraire


Je veux créer une nouvelle instance de tcsh et source un script arbitraire, le tout en une seule étape. Le problème est que lorsque j'utilise le -c option, l’instance du shell se ferme dès que le script est terminé. Donc, dans ce qui suit exemple trivial la pushd commande se termine avec succès mais le shell se ferme:

tcsh -c "pushd ~/some/directory/of/interest"

Comment puis-je générer un script qui modifie l'environnement et ensuite travailler de manière interactive dans cet environnement? Ceci est très utile lorsqu'il est utilisé conjointement avec des programmes tels que ssh ou screen, comme ci-dessous:

ssh -t user@host 'tcsh -c "source ~/test_environment.csh"'

2
2017-08-22 01:36


origine




Réponses:


Notre solution impliquera deux étapes.

  1. Passer la variable d'environnement contenant le chemin d'accès au script que vous souhaitez générer vers le nouveau tcsh exemple.
  2. Avoir tcsh source le script désigné par cette variable d'environnement

Pour l'étape 1 ssh exécutera la commande que vous spécifiez dans votre shell par défaut (celui du serveur de destination). /etc/passwd) Je vais donc vous donner plusieurs solutions pour cela.

  • Si le shell de destination est sh/bash: Connectez-vous au serveur ssh avec la commande: ssh -t user@host 'export SOURCESCRIPT=/tmp/tmp.sh; exec /usr/bin/tcsh'
  • Si le shell de destination est csh/tcsh: Connectez-vous au serveur ssh avec la commande: ssh -t user@host 'setenv SOURCESCRIPT /tmp/tmp.sh; exec /usr/bin/tcsh'
  • Si vous pouvez modifier la configuration du serveur ssh de la destination, ajoutez / modifiez AcceptEnv option dans /etc/ssh/sshd_config autoriser SOURCESCRIPT variable d'environnement à transmettre (par ex. AcceptEnv SOURCESCRIPT), ensemble SOURCESCRIPT dans l'environnement local et connectez-vous avec la commande: ssh -t -o SendEnv=SOURCESCRIPT user@host 'exec /usr/bin/tcsh'

Pour l'étape 2, nous modifions ~/.tcshrc ajouter ce qui suit:

if $?SOURCESCRIPT then
    source $SOURCESCRIPT
endif

4
2017-08-26 06:24



Ceci est une solution de contournement très simple et directe! Il nécessite de modifier les utilisateurs ~/.tcshrc au préalable, mais ce n'est pas un problème dans mon scénario. - nispio
Heureux d'entendre que c'était réussi! Merci d'avoir attrapé l'erreur, corrigé ce signe égal. - ssnobody


Corrigez-moi si je me trompe, mais ne pouvez-vous pas utiliser l'option '-m' pour que tcsh charge un script de démarrage? Je viens de lire la page de manuel et je pense que vous pourriez faire en sorte que le fichier «~ / .tcshrc» fasse un lien symbolique vers un autre script. Dans le cas où il y aurait quelque chose à faire avec les commandes, vous pourriez peut-être essayer les options "-e" ou "-m".

J'espère que cela t'aides!

EDIT: Ou peut-être que vous pourriez utiliser l'option '-i' pour interactif en conjonction avec l'option '-c' :)


-1
2017-08-25 14:05



~/.tcshrc est mon script de démarrage, donc je ne peux pas simplement le remplacer par un lien symbolique. Je cherche un moyen de lancer éventuellement un alterner script de démarrage. - nispio