Executando o arquivo .bat na CLI do cygwin sem a extensão .bat


3

Eu tenho procurado uma maneira de executar dos arquivos em lote a partir da linha de comando do cygwin sem ter que inserir a extensão.

Isso seria possível?

Atualmente, eu tenho que inserir a extensão senão o cygwin não encontra o arquivo de lote.


Porque você quer isso? De qualquer forma, se o seu arquivo de lote for file.bat, tente: 'cmd / C file'
golimar

1
Como um trabalho em volta, você pode adicionar alias command = 'command.bat' em seu shell .profile
kode

Respostas:


2

Não encontrei outra solução, então fiz o que o golimar disse.
Aqui está um script simples que procura .bat arquivos em um diretório específico e cria aliases.
Por exemplo, se houver um arquivo git.bat em /some/path haverá um alias git que aponta para isso.
Adicione isto ao seu ~/.bashrc ou ~/.zshrc ou o que você está usando:

for f in /some/path/*.bat; do alias `basename "${f%.bat}"`=$f; done

2

outra solução é usar a função interna bash command_not_found_handle() como isso:

command_not_found_handle() {
    echo "bash: $1: command_not_found_handle()"  >&2
    LOWERCASE_CMD=$(echo "$1" | tr '[A-Z]' '[a-z]')
    shift
    [ -f /cygdrive/c/CLIPrograms/${LOWERCASE_CMD}.bat ] && /cygdrive/c/CLIPrograms/${LOWERCASE_CMD}.bat "$@"
    return $?

Isso é muito legal! Várias dicas sobre o seu código bash. Se estiver usando uma variável dentro de uma função, certifique-se de defini-la como local (a menos que você tenha uma razão para criar uma var global. Na minha opinião, é um bom estilo usar letras minúsculas para variáveis ​​e maiúsculas para (pseudo-) constantes, embora os gostos variem. Você pode usar ${1,,} para minúscula $ 1, não há necessidade de temp var, subshell e pipe. Caso o .bat arquivo não existe, você deseja imprimir o padrão "bash: $1: command not found" e return 127.
Gene Pavlovsky
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.