Есть ли ярлык для запуска предложенной команды в терминале?

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

[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,

(Это однократная настройка... Сделайте это, и вы готовы идти)

  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,

Другие вопросы по тегам