5

Если я введу команду для программы, которая не установлена, я могу получить сообщение, подобное этому:

[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 ответа3

3

Создайте псевдоним, соответствующий вашей оболочке. В bash добавьте эту строку в ~/.bashrc:

alias sagi="sudo apt-get install"

Затем введите source ~/.bashrc и выполните alias чтобы убедиться, что псевдоним отображается в вашем списке. После этого просто наберите

sagi <package>

вызвать псевдоним. Для других оболочек формат команды псевдонима и имя файла rc будут отличаться, но source и alias должны совпадать.

3

ОБНОВЛЕНИЕ: теперь он попытается установить /bin /program, /usr /bin /program, /sbin /program или /usr /sbin /program.
Это полностью автоматически ...
Скажем, вы вводите g++ main.cpp и у вас не установлен g++, он спросит, хотите ли вы установить пакет g++, и если вы ответите «да», он установит его и запустит g++ main.cpp .

(Это однократная настройка ... Сделай это и у тебя все получится)

  1. Установить apt-файл ... sudo apt-get install apt-file
  2. Обновите свой кеш ... sudo apt-file update
  3. Отредактируйте ~/.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 .

2

Если вы находитесь в графическом терминале, трижды щелкните строку, начинающуюся с sudo apt-get чтобы отметить его полностью, а затем нажмите среднюю кнопку, чтобы вставить его в терминал. Как вариант, судя по выводу, набираю что-то вроде

# $(program | tail -n 1)

выполнить вывод команды tail -n 1 после подачи вывода program . Это наверное не короче. Однако теоретически это должно позволить определить псевдоним, подобный следующему

# alias ii='$( $(history -p !!) | tail -n 1)'

которая должна взять последнюю команду в истории, выполнить ее, получить последнюю строку и выполнить ее снова. К сожалению, это не работает. Здесь обсуждается похожая проблема, но мне не совсем удалось адаптировать ее к этому, bash обычно жалуется, что не нашел "" .

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