Windows Bash (WSL) - sudo: нет tty присутствует и не указана запрошенная программа

После выполнения этот мультфильм Я получаю следующую ошибку при попытке запустить команды как пользователь или даже sudo:

sudo: нет tty присутствует и не указана запрошенная программа

В комментариях Lurdan в этой статье говорится, что вам нужно запустить

sudo -S <YOUR_COMMAND>
chmod 0666 /dev/tty

chmod не работает, но sudo -S делает, но верно ли другое исправление?

Ответ 1

Так глупо, посмотрев дальше вниз, я вижу решение от Beorat:

Чтобы избежать проблемы с sudo tty и другими, запустите эти команды непосредственно перед запуском do-release-обновления:

sudo -S apt-mark hold sudo
sudo -S apt-mark hold procps
sudo -S apt-mark hold strace

Если вы уже обновили, запустите приведенные выше команды, а затем вручную перейдите к пакетам Trusty:

sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/s/sudo/sudo_1.8.9p5-1ubuntu1.1_amd64.deb
sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/p/procps/procps_3.3.9-1ubuntu2_amd64.deb
sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/s/strace/strace_4.8-1ubuntu5_amd64.deb
sudo -S dpkg -i sudo_1.8.9p5-1ubuntu1.1_amd64.deb
sudo -S dpkg -i procps_3.3.9-1ubuntu2_amd64.deb
sudo -S dpkg -i strace_4.8-1ubuntu5_amd64.deb

Дополнительная информация здесь: https://github.com/Microsoft/BashOnWindows/issues/482

Ответ 2

WSL использует исполняемый файл lxrun для управления из Windows:

lxrun -h

Usage:
    /install - Installs the subsystem
        Optional arguments:
            /y - Do not prompt user to accept
    /uninstall - Uninstalls the subsystem
        Optional arguments:
            /full - Perform a full uninstall
            /y - Do not prompt user to accept
    /setdefaultuser - Configures the subsystem user that bash will be launched as. If the user does not exist it will be created.
        Optional arguments:
            username - Supply the username
            /y - If username is supplied, do not prompt to create a password
    /update - Updates the subsystem package index

Учитывая это, вы можете использовать lxrun /setdefaultuser root. Просто подумал, что я бы указал на эту сторону, поскольку это требовалось, когда я столкнулся с той же проблемой, что и после попытки обновления до Xenial. Я могу подтвердить, что работает эта команда, затем команды wget/dpkg мои проблемы были устранены.

Команды, которые я использовал:

wget http://mirrors.kernel.org/ubuntu/pool/main/s/sudo/sudo_1.8.9p5-1ubuntu1.4_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/main/p/procps/procps_3.3.9-1ubuntu2_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/main/s/strace/strace_4.8-1ubuntu5_amd64.deb
dpkg -i sudo_1.8.9p5-1ubuntu1.4_amd64.deb
dpkg -i procps_3.3.9-1ubuntu2_amd64.deb
dpkg -i strace_4.8-1ubuntu5_amd64.deb

Наконец, вам может потребоваться запустить sudo apt-get install -f, если вы получите The following packages have unmet dependencies [xxx] but it is not going to be installed

Ответ 3

Я избавился от ошибки, переместив /etc/hosts в/etc/hosts.bu. После закрытия оболочки и открытия снова /etc/hosts воссоздается и добавляется имя вашего компьютера. Ошибка исчезла (для меня.)