Colocando o diretório de trabalho “canonical” em um prompt zsh no OS X (iTerm 2, se isso for importante)

0

Eu uso zsh e oh-my-zsh para meu ambiente de shell no OS X, e estou tendo dificuldades para rastrear se o que está acontecendo é resultado de uma função oh-my-zsh ou o comportamento padrão de zsh; é totalmente uma questão estética, mas me deixa louco.

A versão curta é que se eu cd em um diretório, a coisa que é impressa no meu prompt de %c é exatamente o argumento que foi passado para cd ; Então, se eu estou mudando para o diretório "teste", mas eu soletrar "test" por acidente, então "tst" é o que vai aparecer no meu prompt. Isso é muito chato.

Outro exemplo de onde aparece é quando uso essa função shell (simplificada de Brett Terpstra )

cdf()
 {
   target='osascript -e 'tell application "Finder" to get POSIX path of (target of front Finder window as text)''
   cd ${target}
 }

Quando eu uso essa função, independentemente do diretório em que eu termino, meu diretório de trabalho é exibido como ~target no meu prompt.

Como eu disse, estas são questões totalmente cosméticas, mas isso está me deixando louco. Isso é uma coisa zsh, uma coisa do meu-zsh, ou existe uma expansão diferente que eu possa usar nas configurações do meu prompt para corrigir isso? Eu estou usando o iTerm 2, mas eu tentei no Terminal.app e acontece a mesma coisa.

    
por Doug Stephen 18.04.2013 / 03:49

1 resposta

2

As duas partes da sua pergunta têm resoluções diferentes.

cd TEst

Esse comportamento resulta da interação de duas peculiaridades:

  • O OS X usa um sistema de arquivos sem distinção entre maiúsculas e minúsculas por padrão.
  • Os shells definiram PWD como "o diretório de trabalho atual, conforme definido pelo comando cd ", em oposição ao caminho absoluto relatado pela chamada do sistema getcwd .

O último truque permite que você use links simbólicos como se fossem diretórios normais. Lembrando o caminho que você digitou em vez do caminho absoluto, o shell permite que você cd symlink ... cd .. volte ao ponto de partida. Em um sistema de arquivos que não diferencia maiúsculas de minúsculas, os erros de digitação como cd TEst se comportam exatamente como os links simbólicos, configurando PWD para o caminho digitado em vez do nome do sistema de arquivos do diretório.

Para contornar isso, você pode usar $(pwd -P) para obter o caminho canônico conforme relatado por getcwd em vez do caminho lógico do shell. Tenha em atenção que isto tem o efeito colateral de resolver todos os links simbólicos no caminho. Para imitar a formatação de %c use: $(basename $(pwd -P | sed "s#$HOME#~#"))

Como alternativa, você pode converter seu sistema de arquivos para maiúsculas e minúsculas, mas alguns aplicativos do OS X, como Steam e Photoshop, não são compatíveis.

cd ${target}

Eu não consigo reproduzir esse comportamento no OS X com zsh - pode ser um problema com o oh-my-zsh ou sua configuração. Embora você possa usar a mesma solução $(pwd -P) para isso, outros scripts e programas podem falhar se $PWD não resolver para um caminho legítimo. Se você puder reproduzir o problema com uma instalação mínima de oh-my-zsh, você deve reportar um bug para os mantenedores.

    
por 18.04.2013 / 23:44