Есть ли ярлык для запуска предложенной команды в терминале?
Если я введу команду для программы, которая не установлена, я могу получить сообщение, подобное этому:
[user]~$ program
The program 'program' is currently not installed. You can install it by typing:
sudo apt-get install program
[user]~$
Есть ли сочетание клавиш или команда, которую я могу ввести, которая будет выполнять sudo apt-get install program
без меня, чтобы напечатать это сам?
3 ответа
Создайте псевдоним, соответствующий вашей оболочке. В bash
, добавьте эту строку в ~/.bashrc
:
alias sagi="sudo apt-get install"
Затем, source ~/.bashrc
и выполнить alias
чтобы убедиться, что псевдоним появляется в вашем списке. После этого просто введите
sagi <package>
вызвать псевдоним. Для других оболочек формат команды alias и имя rc-файла будут другими, но source
а также alias
должно быть таким же.
Если вы находитесь в графическом терминале, нажмите три раза в строке, начинающейся с sudo apt-get
чтобы отметить его целиком, а затем нажмите среднюю кнопку мыши, чтобы вставить его в терминал. В качестве альтернативы, судя по выводу, наберите что-то вроде
# $(program | tail -n 1)
выполнить вывод tail -n 1
Команда после подачи на выходе program
, Это наверное не короче. Однако теоретически это должно позволить определить псевдоним, подобный следующему
# alias ii='$( $(history -p !!) | tail -n 1)'
которая должна взять последнюю команду в истории, выполнить ее, получить последнюю строку и выполнить ее снова. К сожалению, это не работает. Здесь обсуждается похожая проблема, но мне не удалось адаптировать ее к этому, bash обычно жалуется, что не нашел ""
,
ОБНОВЛЕНИЕ: Теперь он попытается установить / bin / program, / usr / bin / program, / sbin / program или / usr / sbin / program.
Это полностью автоматически...
Скажи, что ты вводишь g++ main.cpp
и у вас не установлен g++, он спросит, хотите ли вы установить пакет g++, и если вы ответите "да", он установит его и затем запустит g++ main.cpp
,
(Это однократная настройка... Сделайте это, и вы готовы идти)
- Установить apt-файл...
sudo apt-get install apt-file
- Обновите свой кеш...
sudo apt-file update
Отредактируйте ~/.bashrc и добавьте это к нему:
command_not_found_handle () { ask () { echo -ne "$1 (Y/n) "; read -N1 YES_ANSWER; echo ""; YES_ANSWER=`echo $YES_ANSWER | sed 's/Y/y/; s/N/n/;'`; if [ "x$YES_ANSWER" == "xy" ]; then unset YES_ANSWER; return 0; elif [ "x$YES_ANSWER" == "xn" ]; then unset YES_ANSWER; return 1; elif [ "x$YES_ANSWER" == "x" ]; then unset YES_ANSWER; return 0; else ask_yes "$1"; unset YES_ANSWER; return $?; fi; } if [ "x$1" == "x" ]; then echo "File name not provided."; return 1; fi; echo "Command not found: $1"; echo "Searching for file in database..."; FILE="`apt-file search /bin/$1 | sed 's/: /_/'`"; if [ "x$FILE" != "x" ]; then FILE="`apt-file search /usr/bin/$1 | sed 's/: /_/'`"; fi; if [ "x$FILE" != "x" ]; then FILE="`apt-file search /sbin/$1 | sed 's/: /_/'`"; fi; if [ "x$FILE" != "x" ]; then FILE="`apt-file search /usr/sbin/$1 | sed 's/: /_/'`"; fi; if [ "x$FILE" != "x" ]; then for f in "$FILE"; do if ask "\nDo you want to install package `echo $f | sed 's/_.*$//'` which provides `echo $f | sed 's/^.*_//'`?"; then sudo apt-get install `echo $f | sed 's/_.*$//'`; "$@"; return $?; fi; done; else echo "Could not find file $1."; return 1; fi; }
Я все еще проверяю это, но в предварительном тесте, кажется, работает. Время от времени было бы хорошо бежать apt-file update
обновить список доступных файлов.
Чтобы отредактированный ~/.bashrc вступил в силу, выполните одно из следующих действий: выйдите из системы и снова войдите в систему или выполните команду . ~/.bashrc
,