Everything works
Pelo contrário, nenhuma de suas abordagens funcionará. ☺
A opção -cd
para urxvt
altera o diretório no processo pai, que se torna o emulador de terminal no lado mestre do pseudo-terminal, antes de bifurcar o filho. O motivo pelo qual você tem problemas para desmontar é que o processo do emulador de terminal mantém esse diretório como seu diretório de trabalho.
(Observe que isso não é um problema exibido pela versão cliente-servidor do Unicode rvxt, urxvtc
.)
Não há modo em que um shell Unix convencional execute um comando a partir da opção -c
e, em seguida, entre na leitura do modo interativo da entrada padrão. Este não é o cmd
da Microsoft / IBM com sua opção /k
. ☺ Você obtém a execução qualquer da entrada padrão sem comando ou execução de um comando sem execução da entrada padrão; não ambos.
Você, sem saber, chegou perto de uma abordagem que funcionará tentando executar cd
como se não fosse um shell embutido. (Seu problema em não ser capaz de executar o filho é que o nome do programa que você está tentando executar é a única string /bin/bash -c cd /etc
que quase certamente não é o nome de um arquivo de imagem do programa em seu sistema.)
Na verdade, há binários autônomos cuja única tarefa real é alterar o diretório de trabalho e, em seguida, carregar a cadeia para outro programa, que seria um shell interativo nesse caso. As do my nosh toolkit e do kit de ferramentas execline da Laurent Bercot são chamadas de chdir
e cd
. A ferramenta de Wayne Marshall é chamada runtool
.
-
urxvt -e chdir "$@" "$SHELL"
-
urxvt -e cd "$@" "$SHELL"
-
urxvt -e runtool -c "$@" "$SHELL"
A outra abordagem restante que não fornecerá exatamente o que você deseja é usar a variável de ambiente ENV
. Infelizmente, para fazer uso disso, você precisa que seu shell interativo esteja no modo POSIX-conformant, o que provavelmente não será o tipo de shell interativo que você deseja; bem como um arquivo de script temporário, com todos os shenanighans de criação, segurança e limpeza que isso implica.