CD silencioso usando cdpath com zsh?

0

Ao usar cd para navegar até um caminho encontrado por cdpath que não está localizado em relação a . , o caminho resultante será ecoado. Por exemplo, supondo uma estrutura de diretório como ~/parent/child e cdpath como cdpath(~/parent) , você vê isto:

$ cd parent
$ cd ~
$ cd child
~/parent/child
$

Basicamente, quero que cd child fique em silêncio, assim como cd ~/parent/child , independentemente da distância do diretório atual. Existe uma maneira de silenciar cd quando ele está usando cdpath para localizar e pular para um diretório?

    
por lettertwo 13.03.2013 / 16:02

2 respostas

2

Eu acho que isso é embutido no shell. Aqui está um trecho de builtin.c :

if (isset(INTERACTIVE) || isset(POSIXCD)) {
    if (func != BIN_CD && isset(INTERACTIVE)) {
        if (unset(PUSHDSILENT) && !quiet)
            printdirstack();
    } else if (doprintdir) {
        fprintdir(pwd, stdout);
        putchar('\n');
    }
}

int doprintdir é um tipo de sinalizador, que é definido ao usar, por exemplo, o cdpath .

Então, se você realmente quer se livrar da impressão do novo diretório, comente a parte else if na origem - com a desvantagem de que você nunca mais será notado .

    
por 13.03.2013 / 18:24
2

Uma abordagem seria rolar sua própria função cd :

cd()
{
    if [ $# = 0 ]
    then
        builtin cd "$HOME"
        return
    fi
    # Use       if [[ "$1" =~ ^/ ]]
    # here if zsh supports it.
    case "$1" in
      /*)
        builtin cd "$1"
        return
    esac
    if [ -d "$1"  -a  -x "$1" ]
    then
        builtin cd "$1"
        # You might want this to return only if the cd succeeds.
        return
    fi
    for base in ~/parent /other/dir/thatIuse_a_lot
    do
        if builtin cd "$base/$1" 2> /dev/null
        then
            return
        fi
    done
    echo "$1: cd failed" >&2          # Customize to your liking.
    return 1                          # Indicate failure.
}

Eu não tenho acesso a um zsh agora, mas testei isso no shell Korn. Claro que você pode melhorar isso para analisar uma variável cdpath em tempo de execução; Deixarei isso como um exercício.

    
por 13.03.2013 / 23:29

Tags