Немного другой подход от других ответов: запустите свою команду, и если это не удастся, запустите оболочку. Таким образом, вам не нужно открывать терминал (который не различает успех команды или отказ), и вы можете обнаружить, что оболочка особенно полезна при сбое. Чтобы закрыть его, просто используйте Ctrl-D (EOF), «exit», Alt-F4 (или что-то, что ваш оконный менеджер использует для закрытия окон) и т. Д.
#!/bin/sh
[ $# -eq 0 ] && {
echo "$(basename $0): no command" >&2
exit 1
}
"$@" || {
echo "failed: $?"
exec $SHELL
}
Поместите этот файл где-нибудь, например ~ / bin, а затем используйте команду «success-or-shell your original command» в вашей пусковой установке.
У меня были похожие проблемы за последние пару дней, поэтому я проследил его до того, как bash обрабатывает команду «не найден». В Ubuntu 14.04 (и Linux Mint 17, где я использую скрипты 14.04), /etc/bash.bashrc имеет следующую функцию:
if [ -x /usr/lib/command-not-found ]; then
function command_not_found_handle {
# check because c-n-f could've been removed in the meantime
if [ -x /usr/lib/command-not-found ]; then
/usr/bin/python /usr/lib/command-not-found -- $1
return $?
else
return 127
fi
}
fi
Однако, / usr / lib / command-not-found был перезаписан для Python 3. Он обрабатывает команду /etc/bash.bashrc с помощью:
if sys.version < '3':
# We might end up being executed with Python 2 due to an old
# /etc/bash.bashrc.
import os
if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ:
os.execvp("python3", [sys.argv[0]] + sys.argv)
Это вызывает «python3» из пути, а не дает прямой путь. Чтобы исправить это, строка 22 из / usr / lib / command-not-found должна быть изменена с
os.execvp("python3", [sys.argv[0]] + sys.argv)
на
os.execv("/usr/bin/python3", [sys.argv[0]] + sys.argv)
Это похоже на ошибку с Ubuntu а не Анаконда. Я проверю, появится ли оно в последующих дистрибутивах.
У меня была аналогичная проблема с окнами - я удалил системную переменную PYTHONHOME. Я попытаюсь перевести решение на английский. Мой компьютер> Свойства> Дополнительные параметры системы> Переменные среды, найдите переменную PYTHONHOME и удалите ее.