У меня есть много сценариев, которые используются для запуска и остановки служб. Это разочарование при использовании дополнения табуляции, что вам нужно набрать:

 ./serviceScript.sh [sta|sto]

прежде чем будет достаточно информации для завершения табуляции, чтобы завершить слово начало или остановка.

Есть ли у кого-нибудь другая пара слов, которые могли бы разумно использоваться вместо старт-стопа или, наоборот, для лучшего решения моей проблемы?

5 ответов5

2

Если вы только стараетесь не вводить так много раз, вы можете использовать Ctrl + R, чтобы просмотреть историю команд после их однократного ввода.

После нажатия Ctrl + R вы можете начать писать, как только начнете писать, как только вы начнете писать, bash history будет выполнять команды из истории. Таким образом, если после нажатия Ctrl + R вы просто написали st а последней выполненной вами командой была команда с аргументом stop , который появится.

Если вам нужен более старый, например, команда с аргументом запуска , просто нажав Ctrl + R, вы получите полную команду запуска.

1

Если слова start и stop слишком много для ввода, почему бы не создать псевдонимы, выполняющие одно или другое?

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

Конечно, если набирать слишком много усилий, вы всегда можете сделать значки / ярлыки на рабочем столе для нужных действий, тогда вам нужно всего лишь нажать ... Только варианты после этого могут быть служебной обезьяной или чем-то еще. (Ха! сервис Обезьянка за услуги ...)

1

Для Bash вы можете использовать функцию Bash Completion. Установите пакет bash_completion из вашего дистрибутива. Есть хорошие шансы, что у вас уже будет завершение для скриптов /etc/init.d. Если нет, вы можете прочитать, как сделать завершение самостоятельно в сети. Вот одна ссылка.

Другой способ - использовать предопределенные функции, подобные этим:

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

Здесь вы можете использовать команду rc для вызова сценариев init.d, таких как: rc apache2 start . Это будет переводиться в /etc/init.d/apache2 start . У команды также есть автозаполнение для файлов в вашем каталоге init.d , т.е. когда вы наберете : rc apa[TAB] оно автоматически завершится до rc apache2 .

Другие короткие команды для удобства: rc-start apache2 будет вызывать rc apache2 start и, следовательно, /etc/init.d/apache2 start

Изменить: вы можете изменить путь /etc/init.d на /etc/rc.d, если ваш дистрибутив использует rc.d для сервисов.

1

Первое, что пришло в голову, было начало / конец, но ./my_service begin не совсем правильно семантически.

Run/halt используются не так часто, поэтому их труднее запомнить, но ./my_service run и ./my_service halt кажется, хорошо работают с обычным английским значением слов.

Просто помните, что если вы хотите, чтобы init мог управлять вашими службами, команды start и stop прежнему должны поддерживаться, даже если вы вводите другие команды, более удобные для завершения вкладок.

0

Вы можете попробовать что-нибудь взломанное, например:

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

Это позволит вам ввести что - то вроде rest Tab sma Tab , которая будет расширяться , чтобы restart smartmontools и вызвать /etc/init.d/smartmontools restart

Но в вашем дистрибутиве zsh для этой работы уже может быть какая-то функция завершения. Просто посмотрите на functions/Completion/Unix/ .

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