Executa o tcsh com script de inicialização arbitrário

2

Eu quero criar uma nova instância de tcsh e criar um script arbitrário, tudo em uma única etapa. O problema é que, quando eu uso a opção -c , a instância do shell é fechada assim que o script é concluído. Portanto, no seguinte exemplo trivial , o comando pushd é concluído com êxito, mas o shell é encerrado:

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

Como posso criar um script que modifique o ambiente e, em seguida, trabalhe interativamente dentro desse ambiente? Isso é mais útil quando usado em conjunto com programas como ssh ou screen , como no seguinte:

ssh -t user@host 'tcsh -c "source ~/test_environment.csh"'
    
por nispio 22.08.2015 / 03:36

2 respostas

4

Nossa solução envolverá duas etapas.

  1. Pass Variável de ambiente contendo o caminho para o script que você deseja originar para a nova tcsh instance.
  2. Tem tcsh source o script apontado por esta variável de ambiente

Para a etapa 1%,ssh executará o comando especificado em seu shell padrão (aquele no /etc/passwd do servidor de destino), portanto, darei várias soluções para isso.

  • Se o shell de destino for sh / bash : Conecte-se ao servidor ssh com o comando: ssh -t user@host 'export SOURCESCRIPT=/tmp/tmp.sh; exec /usr/bin/tcsh'
  • Se o shell de destino for csh / tcsh : Conecte-se ao servidor ssh com o comando: ssh -t user@host 'setenv SOURCESCRIPT /tmp/tmp.sh; exec /usr/bin/tcsh'
  • Se você puder modificar a configuração do servidor ssh do destino, adicione / modifique a opção AcceptEnv em /etc/ssh/sshd_config para permitir que a variável de ambiente SOURCESCRIPT seja passada (por exemplo, AcceptEnv SOURCESCRIPT ), defina SOURCESCRIPT no ambiente local e conecte com o comando: ssh -t -o SendEnv=SOURCESCRIPT user@host 'exec /usr/bin/tcsh'

Para o passo 2, modificamos ~/.tcshrc para adicionar o seguinte:

if $?SOURCESCRIPT then
    source $SOURCESCRIPT
endif
    
por 26.08.2015 / 08:24
-1

Corrija-me se estiver errado, mas você não pode usar a opção '-m' para que o tcsh carregue um script de inicialização? Acabei de ler a man page e pensei que você poderia tornar o arquivo '~ / .tcshrc' um link simbólico para outro script. No caso de haver algo errado com os comandos, talvez você possa tentar as opções '-e' ou '-m'.

Espero que isso ajude!

EDIT: Ou talvez você possa usar a opção '-i' para interativo em conjunto com a opção '-c':)

    
por 25.08.2015 / 16:05

Tags