Como abrir um novo terminal no diretório atual?

2

Quando em um diretório, às vezes, quero que outro terminal seja aberto no mesmo diretório.

Por exemplo, eu estou em ~/code/someproject/src/ , e eu abro um novo terminal, por padrão, ele abre em ~ , como lanço um novo terminal no diretório atual?

Estou executando o Arch Linux com o urxvt como meu terminal e o i3 como meu gerenciador de janelas.

    
por Richard Hum 27.05.2014 / 15:20

4 respostas

2

Existe um tópico muito informativo no fórum do i3-faq que tem vários scripts / programas que abordam esse problema.

link

Eu fui para o programa c xcwd que realmente faz um ótimo trabalho. Também funciona a partir de programas GUI.

    
por 29.05.2014 / 20:14
1

quando você inicia um terminal a partir de um terminal existente, o ambiente do terminal original será preservado, incluindo o diretório de trabalho atual e quaisquer outras variáveis de ambiente que você tenha configurado. É por isso que urxvt & funciona

    
por 29.05.2014 / 06:04
0

Eu tenho um hack realmente feio que escrevi para fazer isso.

link

Meu nome de host é bulletMaster, e meu diretório pessoal é / root /

    
por 29.05.2014 / 20:50
0

Nenhuma das respostas que vi funcionou ao usar urxvtd , nesse caso todas as janelas de terminal estão associadas ao mesmo processo daemon urxvtd e parece não haver uma maneira fácil de identificar a instância de shell correta para obter o PWD.

Para resolver isso, usei um hack feio. Eu uso o zsh com um truque de preexec para exibir no título da janela o diretório atual (junto com o comando atual e último, o tempo, etc.), o que eu acho que é útil de qualquer maneira. Eu faço isso com o seguinte formulário no meu zshrc (você precisará adaptá-lo, consulte este comando ; veja aqui para a última versão completa):

preexec () {
  local WD="$(pwd | sed "s/^\/home\/$USER/~/")"
  export LASTDATE="'date +%T'"
  if [[ "$TERM" == "rxvt-unicode" || "$TERM" == "rxvt-unicode-256color" ]]; then
    export COMMAND="$(echo $1 | tr -d '\n')"
    echo -ne "\e]0;$LOCALNAME $HOST:$WD$ $COMMAND ($LASTDATE)\a"
  fi
}

Depois, criei um script para executar um novo urxvt no mesmo diretório da instância urxvt, simplesmente extraindo o título na janela atual (veja aqui para a versão mais recente):

#!/bin/bash

# run ARGV, with -cd FOLDER if FOLDER can be extracted from title of current
# window (see zsh config for how the title gets put in the window)

# http://superuser.com/a/403369/77814
quoted_args="$(printf " %q" "$@")"

# inspired by
# https://faq.i3wm.org/question/150/how-to-launch-a-terminal-from-here/%3C/p%3E.html
ID=$(xdpyinfo | grep focus | cut -d ',' -f1 | rev | cut -d ' ' -f1 | rev)
CLASS=$(xprop -id "$ID" | grep -m1 WM_CLASS | cut -d'"' -f2)

# https://stackoverflow.com/a/19411918
if [ "${CLASS^^}" != "URXVT" ]
then
  # no urxvt focused -- just do the default
  # optionally we could try to extract the pwd with
  # https://github.com/schischi-a/xcwd or something
  exec $quoted_args
fi

TITLE=$(xprop -id "$ID" | grep -m1 WM_NAME)
MYPWD=$(echo "$TITLE" | cut -d'$' -f1 | cut -d'"' -f2- | cut -d':' -f2-)
MYPWD2="${MYPWD/#\~/$HOME}"

if [ ! -z "$MYPWD2" -a -d "$MYPWD2" -a -r "$MYPWD2" -a -x "$MYPWD2" ]
then 
  exec $quoted_args -cd "$MYPWD2"
else
  exec $quoted_args
fi
    
por 21.12.2016 / 11:51