Script de shell para executar um programa com argumentos

1

Estou configurando servidores de jogo via SSH e queria saber se eu poderia executar um arquivo que poderia ser executado com argumentos (como arquivos de lote do Windows) sem ter que digitá-lo por tanto tempo.

O que eu quero é um arquivo que será executado

./srcds_run -game csgo -console -usercon +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 -tickrate 128

sem eu ter que digitar tudo isso ou copiá-lo de uma página wiki o tempo todo.

Só para esclarecer para as pessoas que vieram depois que isso foi resolvido, meu servidor está rodando o CentOS.

    
por Geotan 12.07.2015 / 06:18

5 respostas

3

Basta colocar um script de shell simples no diretório em que seu jogo reside

#!/bin/sh
cd $(dirname $0)
./srcds_run -game csgo -console -usercon +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 -tickrate 128

Se você quiser colocar o script em outro lugar, você deve usar o caminho completo

#!/bin/sh
/path/to/srcds_run -game csgo -console -usercon +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 -tickrate 128
    
por 12.07.2015 / 10:37
1

Você precisa criar um alias no seu .bash_profile :

alias game="./srcds_run -game csgo -console -usercon +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 -tickrate 128"

Após source .bash_profile ou relogin (para carregar o novo comando game ) e finalmente game .

    
por 12.07.2015 / 06:35
1

Depois de adicionar o alias, você também pode vincular uma tecla rápida nas configurações do teclado (depende da distribuição ofc) para executá-la com rapidez e facilidade.

(como o windows + g)

    
por 12.07.2015 / 07:27
1

Sugiro que você use uma função de shell em vez de um alias.

runds(){
    set srcds_run \
            -game      "${1-csgo}"      \
            -console                    \
            -usercon                    \
            +game_type "${5-0}"         \
            +game_mode "${6-1}"         \
            +map       "${2-de_dust2}"  \
            +mapgroup  "${3-mg_active}" \
            -tickrate  "${4-128}"
    if   command -v "./$1" >/dev/null
    then "./$@"; else "$@"
    fi
}

O acima é uma função shell que você pode executar em um prompt de comando com copiar / colar agora, ou então colar no arquivo de ambiente do seu shell (como ~/.bashrc ) que irá parametrizar seu comando. Após a função ter sido definida no ambiente do seu shell, você pode digitar o comando runds sem argumentos para usar apenas os argumentos que você nomeou em sua pergunta, ou então, se você fornecer argumentos, ele usará aqueles que você especificar para substituir o argumento. padrões atribuídos para $1 ... $6 em ordem.

Eu tentei adivinhar quais argumentos você tinha mais chances de querer mudar ocasionalmente do que outros e ordená-los de acordo, mas também preservou a ordem da linha de comando na pergunta, caso isso importasse. É por isso que eles não aparecem em ordem numérica na declaração set .

Eu também o configurei para que a função primeiro tente executar ./srcds , mas, se isso falhar, ele ainda tentará executar um comando srcds , que pode estar em outro local localizado em $PATH caso.

De qualquer forma, o ponto é, se você fizer isso ...

runds

... no prompt do seu shell, então o comando que a função tentará executar será ...

./srcds_run \
    -game      csgo      \
    -console             \
    -usercon             \
    +game_type 0         \
    +game_mode 1         \
    +map       de_dust2  \
    +mapgroup  mg_active \
    -tickrate  128

... se ./srcds_run for um arquivo que o shell pode tentar executar, ou então tentará o mesmo comando, mas sem o primeiro ./ , senão ele falhará com erro e informará.

Mas se você fizer isso ...

runds other_game new_map

Em seguida, o comando tentado será alterado um pouco ...

./srcds_run \
    -game      other_game \
    -console              \
    -usercon              \
    +game_type 0          \
    +game_mode 1          \
    +map       new_map    \
    +mapgroup  mg_active  \
    -tickrate  128

... será o comando que ele tenta executar, com as mesmas notas de antes sobre ./ e assim por diante, é claro.

    
por 12.07.2015 / 09:22
1

Crie um arquivo chamado csgo (ou qualquer nome que você queira digitar) em um diretório listado em echo $PATH . O diretório típico seria /usr/local/bin se você quiser que todos os usuários possam executar o script ou ~/bin ( bin em seu diretório pessoal) se o script for apenas para você. Escreva o seguinte conteúdo no script:

#!/bin/sh
/path/to/srcds/srcds_run -game csgo -console -usercon +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 -tickrate 128

Substitua /path/to/srcds pelo caminho em que você instalou o programa (o diretório em que o executável srcds_run está).

Se você usar um editor do Windows para editar o script, certifique-se de dizer a ele para usar as terminações de linha do Unix (LF); As terminações de linha do Windows (CRLF) não funcionarão.

Se você adicionar "$@" com um espaço antes dele no final da linha, poderá passar argumentos para o programa passando argumentos para o script.

#!/bin/sh
/path/to/srcds/srcds_run -game csgo -console -usercon +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 -tickrate 128 "$@"

Se o programa não encontrar seus arquivos quando for invocado em um diretório diferente, mude para o diretório primeiro.

#!/bin/sh
cd /path/to/srcds &&
./srcds_run -game csgo -console -usercon +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 -tickrate 128 "$@"

Depois de salvar o arquivo, torne-o executável. Na linha de comando (usando o caminho correto para onde você salvou o script):

chmod +x ~/bin/csgo

Agora você pode executar o programa digitando o comando csgo .

    
por 12.07.2015 / 22:32