Windows: roda o script no cd

1

No linux, tenho vários scripts em execução ao alterar para um diretório. Tarefas como atualização de repos, logs rotativos, etc, são decididas através de um pequeno script bash que substitui o "cd" do bash e executa alguns dos meus scripts dependendo de qual diretório eu estou mudando.

No meu Ubuntu, parece muito com isso:

function cd() { 
  builtin cd "$@" && /home/cfv/scripts/changedir-hooks
}

Todos os meus esforços para sobrepor o "cd" existente nas janelas foram inúteis e acabaram em SO Foi-me dito que viesse aqui e perguntasse se talvez eu estivesse perdendo alguma coisa em algum lugar.

Para esclarecer, eu entendo que posso ter meu próprio cd.cmd com algumas coisas nele, mas eu não consegui executá-lo após o cd do Windows, e o que eu quero fazer é primeiro alterar o diretório e then agir de acordo com esse fato.

O Windows pode fazer isso?

    
por Carlos Vergara 27.06.2015 / 17:30

1 resposta

0

Em BASH Shell Command Search Seqüência , uma FUNÇÃO DE Shell tem precedência sobre um comando BUILTIN . Não existe tal conceito implementado no shell do Windows de acordo com o meu melhor conhecimento (embora uma macro doskey possa se assemelhar a ela): um interno o comando tem precedência sobre qualquer coisa com o mesmo nome (consulte Sequência de pesquisa de comandos ). Portanto, cd [parameters] exibe o nome ou altera o diretório atual sempre (consulte cd /? ).

Você pode usar cd.cmd [parameters] ou renomear seu script cmd , consulte o próximo exemplo. Este script cdn executa o comando interno cd e então altera o título da janela CLI atual para algo como o caminho do diretório atual:

@rem cdn.bat
@rem change directory (and drive) || abort script processing in case of bad success
@cd /D %* || @goto :eof
@rem eliminate (if any in %*) trailing backslashes, surrouding double-quotes
@rem and/or (combined) symbols to current, parent or root directory (., .., \)
@call :window_title "%CD%"
@rem or, to title window to bare folder name, use: 
@rem @for /F "tokens=*" %%G in ("%CD%") do @title %%~nG%%~xG
@goto :eof

:window_title
  @if "%~p1%~n1%~x1" == "\%~n1%~x1" (
    @rem window title to 'X:\folder' on highest-level path or to 'X:\' on drive root
    @title %~d1%~p1%~n1%~x1
  ) else (
    @rem window title to 'X:\...\folder' otherwise (i.e. nor root, nor highest-level)
    @title %~d1^\ ..^\%~n1%~x1
  )
  @exit /B
    
por 27.06.2015 / 22:37