1

В Linux у меня есть несколько скриптов, запускаемых при переходе в каталог. Такие задачи, как обновление репозиториев, ротация логов и т.д., Решаются с помощью небольшого сценария bash, который переопределяет bd-диск и запускает некоторые из моих сценариев в зависимости от того, на какой каталог я меняюсь.

В моем Ubuntu это выглядит примерно так:

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

Все мои попытки перекрыть существующий «компакт-диск» на окнах были тщетными, и в SO мне сказали прийти сюда и спросить, возможно, я что-то где-то упускаю.

Чтобы уточнить, я понимаю, что у меня может быть свой собственный cd.cmd с некоторыми вещами в нем, но я не смог запустить его после Windows cd , и я хочу сначала изменить каталог, а then действовать в соответствии с этим фактом. ,

Может ли Windows это сделать?

1 ответ1

0

В поисковой последовательности BASH Shell Command, функция оболочки имеет приоритет над BUILTIN команды. Насколько я знаю, в оболочке Windows такой концепции не реализовано (хотя макрос doskey может напоминать ее): внутренняя команда имеет приоритет над чем-либо с таким же именем (см. Последовательность поиска команд). Таким образом, cd [parameters] всегда отображает имя или изменяет текущий каталог (см. cd /?).

Вы можете использовать либо cd.cmd [parameters] , либо переименовать скрипт cmd , см. Следующий пример. Этот сценарий cdn выполняет внутреннюю команду cd а затем изменяет заголовок текущего окна CLI на что-то вроде текущего пути к каталогу:

@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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .