Nomes amigáveis de conclusão de tabulação para iniciar / parar

0

Eu tenho muitos scripts que são usados para iniciar e parar serviços. É frustrante ao usar a conclusão de tabulação que você precisa digitar:

 ./serviceScript.sh [sta|sto]

antes que haja informação suficiente para completar a tabulação para completar a palavra start ou stop.

Alguém tem um par de palavras diferente que possa ser usado de maneira sensata no lugar do start stop ou, alternativamente, uma solução melhor para o meu problema?

    
por Ben Page 02.07.2012 / 12:29

5 respostas

2

Se você estiver apenas tentando evitar digitar isso sempre, use Ctrl + R para ver o histórico de comandos depois de digitá-los uma vez.

Depois de pressionar Ctrl + R, você pode começar a escrever assim que começar a escrever assim que começar a escrever o bash history e concluirá os comandos do histórico. Então, se depois de pressionar Ctrl + R você acabou de escrever st e o último comando que você executou foi o comando com o argumento stop que aparecerá.

Se você quiser um mais antigo, por exemplo, o comando com o argumento start , apenas pressionando Ctrl + R, você obterá o comando start completo.

    
por 02.07.2012 / 12:35
1

Se as palavras começarem e parar forem demais para digitar, por que não criar aliases que executam um ou outro?

# (for bash)
alias myservicebegin='serviceScript.sh start'
alias myserviceend='serviceScript.sh stop'

É claro que, se digitar for muito esforço, você pode sempre fazer ícones / atalhos para as ações desejadas, então você só precisa clicar ... Somente opções após isso seriam talvez um macaco de serviço ou algo assim. (ha! service Monkey para serviços ...)

    
por 02.07.2012 / 12:58
1

Para Bash, você pode usar o recurso Bash Completion. Instale o pacote bash_completion da sua distro. Há boas chances de que você tenha a conclusão dos scripts /etc/init.d já. Se não, você pode ler como completar você mesmo ao redor da rede. Aqui está um link .

Outra maneira é usar funções predefinidas como estas:

if [[ ${EUID} == 0 ]] ; then # available only for root user
       # rc scripts managing
       rc() { /etc/init.d/$*; }
       complete -o filenames -W "$(cd /etc/init.d/ && echo *)" rc

       rc-start() { for arg in $*; do rc $arg start; done } 
       rc-restart() { for arg in $*; do rc $arg restart; done } 
       rc-stop() { for arg in $*; do rc $arg stop; done } 
       rc-status() { for arg in $*; do rc $arg status; done } 
fi

Aqui você pode usar o comando rc para chamar os scripts init.d como: rc apache2 start . Isso irá traduzir para /etc/init.d/apache2 start . O comando também tem autocompletar os arquivos no diretório init.d , ou seja, quando você digita: rc apa[TAB] , será preenchido automaticamente em rc apache2 .

Os outros comandos curtos são para conveniência: rc-start apache2 chamará rc apache2 start e, portanto, /etc/init.d/apache2 start

Editar: você pode alterar o caminho /etc/init.d para /etc/rc.d se sua distro estiver usando o rc.d para serviços.

    
por 02.07.2012 / 13:14
1

A primeira coisa a se lembrar foi o começo / fim, mas ./my_service begin não se sente bem semanticamente.

Executar / parar não é usado com tanta frequência, então eles podem ser mais difíceis de lembrar, mas ./my_service run e ./my_service halt parecem funcionar bem com o significado normal das palavras em inglês.

Lembre-se de que, se você quiser que init seja capaz de gerenciar seus serviços, os comandos start e stop ainda precisarão ser suportados, mesmo que você coloque outros comandos com mais preenchimento de guias amigável.

    
por 04.07.2012 / 10:33
0

Você pode tentar algo hacky assim:

a=(/etc/init.d/*(x:t))
function start stop restart reload {  /etc/init.d/$1 $0 }
for i (start stop restart reload) compctl -k a $i

Ele permitirá que você digite algo como rest Guia sma Guia , que expandirá para restart smartmontools e chamará /etc/init.d/smartmontools restart .

Mas já pode haver algum tipo de função de conclusão em sua distribuição zsh para esse trabalho. Basta dar uma olhada em volta de functions/Completion/Unix/ .

    
por 02.07.2012 / 13:46