почему оболочка использует исполняемый файл в /usr/bin, а не в /usr/local/bin

Я столкнулся с такой же проблемой и это мое устройство (lspci):

00:02.0 VGA compatible controller: Intel Corporation HD Graphics 5500 (rev 09)
04:00.0 3D controller: NVIDIA Corporation GM107M [GeForce 940M] (rev ff)

Теперь все в порядке, у меня все в порядке с Intel и NVidia. и это то, что я установил, 32 -бита были установлены автоматически, я не знаю, почему

$ dpkg -l| grep nvidia

ii  bumblebee-nvidia                3.2.1-14         amd64   NVIDIA Optimus support using the proprietary NVIDIA driver
ii  glx-alternative-nvidia          0.7.4            amd64   allows the selection of NVIDIA as GLX provider
ii  libegl-nvidia0:amd64            375.66-2~deb9u1  amd64   NVIDIA binary EGL library
ii  libegl-nvidia0:i386             375.66-2~deb9u1  i386    NVIDIA binary EGL library
ii  libegl1-glvnd-nvidia:amd64      375.66-2~deb9u1  amd64   Vendor neutral GL dispatch library -- libEGL
ii  libegl1-glvnd-nvidia:i386       375.66-2~deb9u1  i386    Vendor neutral GL dispatch library -- libEGL
ii  libgl1-glvnd-nvidia-glx:amd64   375.66-2~deb9u1  amd64   Vendor neutral GL dispatch library -- libGL
ii  libgl1-glvnd-nvidia-glx:i386    375.66-2~deb9u1  i386    Vendor neutral GL dispatch library -- libGL
ii  libgl1-nvidia-glvnd-glx:amd64   375.66-2~deb9u1  amd64   NVIDIA binary OpenGL/GLX library (GLVND variant)
ii  libgl1-nvidia-glvnd-glx:i386    375.66-2~deb9u1  i386    NVIDIA binary OpenGL/GLX library (GLVND variant)
ii  libgldispatch0-nvidia:amd64     375.66-2~deb9u1  amd64   Vendor neutral GL dispatch library -- libGLdispatch
ii  libgldispatch0-nvidia:i386      375.66-2~deb9u1  i386    Vendor neutral GL dispatch library -- libGLdispatch
ii  libgles-nvidia1:amd64           375.66-2~deb9u1  amd64   NVIDIA binary OpenGL|ES 1.x library
ii  libgles-nvidia1:i386            375.66-2~deb9u1  i386    NVIDIA binary OpenGL|ES 1.x library
ii  libgles-nvidia2:amd64           375.66-2~deb9u1  amd64   NVIDIA binary OpenGL|ES 2.x library
ii  libgles-nvidia2:i386            375.66-2~deb9u1  i386    NVIDIA binary OpenGL|ES 2.x library
ii  libgles1-glvnd-nvidia:amd64     375.66-2~deb9u1  amd64   NVIDIA binary OpenGL|ES 1.x GLVND stub library
ii  libgles1-glvnd-nvidia:i386      375.66-2~deb9u1  i386    NVIDIA binary OpenGL|ES 1.x GLVND stub library
ii  libgles2-glvnd-nvidia:amd64     375.66-2~deb9u1  amd64   NVIDIA binary OpenGL|ES 2.x GLVND stub library
ii  libgles2-glvnd-nvidia:i386      375.66-2~deb9u1  i386    NVIDIA binary OpenGL|ES 2.x GLVND stub library
ii  libglx-nvidia0:amd64            375.66-2~deb9u1  amd64   NVIDIA binary GLX library
ii  libglx-nvidia0:i386             375.66-2~deb9u1  i386    NVIDIA binary GLX library
ii  libglx0-glvnd-nvidia:amd64      375.66-2~deb9u1  amd64   Vendor neutral GL dispatch library -- libGLX
ii  libglx0-glvnd-nvidia:i386       375.66-2~deb9u1  i386    Vendor neutral GL dispatch library -- libGLX
ii  libnvidia-cfg1:amd64            375.66-2~deb9u1  amd64   NVIDIA binary OpenGL/GLX configuration library
ii  libnvidia-cfg1:i386             375.66-2~deb9u1  i386    NVIDIA binary OpenGL/GLX configuration library
ii  libnvidia-eglcore:amd64         375.66-2~deb9u1  amd64   NVIDIA binary EGL core libraries
ii  libnvidia-eglcore:i386          375.66-2~deb9u1  i386    NVIDIA binary EGL core libraries
ii  libnvidia-glcore:amd64          375.66-2~deb9u1  amd64   NVIDIA binary OpenGL/GLX core libraries
ii  libnvidia-glcore:i386           375.66-2~deb9u1  i386    NVIDIA binary OpenGL/GLX core libraries
ii  libnvidia-ml1:amd64             375.66-2~deb9u1  amd64   NVIDIA Management Library (NVML) runtime library
ii  libopengl0-glvnd-nvidia:amd64   375.66-2~deb9u1  amd64   Vendor neutral GL dispatch library -- libOpenGL
ii  libopengl0-glvnd-nvidia:i386    375.66-2~deb9u1  i386    Vendor neutral GL dispatch library -- libOpenGL
ii  nvidia-alternative              375.66-2~deb9u1  amd64   allows the selection of NVIDIA as GLX provider
ii  nvidia-detect                   375.66-2~deb9u1  amd64   NVIDIA GPU detection utility
ii  nvidia-driver                   375.66-2~deb9u1  amd64   NVIDIA metapackage
ii  nvidia-driver-bin               375.66-2~deb9u1  amd64   NVIDIA driver support binaries
ii  nvidia-driver-libs:amd64        375.66-2~deb9u1  amd64   NVIDIA metapackage (OpenGL/GLX/EGL/GLES libraries)
ii  nvidia-driver-libs:i386         375.66-2~deb9u1  i386    NVIDIA metapackage (OpenGL/GLX/EGL/GLES libraries)
ii  nvidia-driver-libs-i386:i386    375.66-2~deb9u1  i386    NVIDIA metapackage (OpenGL/GLX/EGL/GLES 32-bit libraries)
ii  nvidia-egl-common               375.66-2~deb9u1  amd64   NVIDIA binary EGL driver - common files
ii  nvidia-egl-icd:amd64            375.66-2~deb9u1  amd64   NVIDIA EGL installable client driver (ICD)
ii  nvidia-egl-icd:i386             375.66-2~deb9u1  i386    NVIDIA EGL installable client driver (ICD)
ii  nvidia-installer-cleanup        20151021+4       amd64   cleanup after driver installation with the nvidia-installer
ii  nvidia-kernel-common            20151021+4       amd64   NVIDIA binary kernel module support files
ii  nvidia-kernel-dkms              375.66-2~deb9u1  amd64   NVIDIA binary kernel module DKMS source
ii  nvidia-kernel-support           375.66-2~deb9u1  amd64   NVIDIA binary kernel module support files
ii  nvidia-legacy-check             375.66-2~deb9u1  amd64   check for NVIDIA GPUs requiring a legacy driver
ii  nvidia-modprobe                 375.26-1         amd64   utility to load NVIDIA kernel modules and create device nodes
ii  nvidia-persistenced             375.26-2         amd64   daemon to maintain persistent software state in the NVIDIA driver
ii  nvidia-settings                 375.66-1         amd64   tool for configuring the NVIDIA graphics driver
ii  nvidia-support                  20151021+4       amd64   NVIDIA binary graphics driver support files
ii  nvidia-vdpau-driver:amd64       375.66-2~deb9u1  amd64   Video Decode and Presentation API for Unix - NVIDIA driver
ii  nvidia-vulkan-common            375.66-2~deb9u1  amd64   NVIDIA Vulkan driver - common files
ii  nvidia-vulkan-icd:amd64         375.66-2~deb9u1  amd64   NVIDIA Vulkan installable client driver (ICD)
ii  nvidia-vulkan-icd:i386          375.66-2~deb9u1  i386    NVIDIA Vulkan installable client driver (ICD)
ii  xserver-xorg-video-nvidia       375.66-2~deb9u1  amd64   NVIDIA binary Xorg driver
0
29.11.2019, 15:27
2 ответа

Проблема была обнаружена при запуске

$ type -f cmake
cmake is hashed (/usr/bin/cmake)

И очистка хэша bash с помощью

hash -d cmake

После этого cmakeинтерпретировалось так, как ожидалось.

2
28.01.2020, 02:29

Ранее во время того же сеанса оболочки вы использовали cmake, и этот исполняемый файл был найден в /usr/bin.

Затем вы установили еще один исполняемый файл cmakeв /usr/local/bin.

Оболочка bashкэширует первое место, которое она находит для любой внешней команды, которую вы используете, что означает, что ей не нужно выполнять дорогостоящий поиск исполняемого файла в следующий раз, когда вы используете ту же команду. Недостатком этого является то, что он не будет искать снова , когда вы позже устанавливаете другой исполняемый файл с тем же именем, даже если это делается в каталоге, который встречается в $PATHраньше, чем исходный. место нахождения.

Решение этой проблемы заключается в очистке кэшированных местоположений исполняемых файлов, которые хранятся bash. Это делается с помощьюhash -r(rehashв оболочке zsh). Чтобы забыть расположение исполняемого файла cmake, используйтеhash -d cmake(unhash cmakeв оболочке zsh).


Более ранняя версия этого вопроса дополнительно задавалась вопросом, почему две команды type cmakeи which cmakeдали разные результаты, где which cmake, по-видимому, давала ожидаемый результат (/usr/local/bin/cmake), а type cmake, по-видимому, давала неправильный результат (/usr/bin/cmake).

Ответ на этот вопрос заключается в том, что type— это встроенная -команда в bash, которая будет использовать те же кэшированные расположения команд, что и оболочка, и что which— это , а не . ] встроенная команда -и, следовательно, не сможет использовать эти кэшированные местоположения исполняемых файлов.

В этом случае whichдал ожидаемый результат, потому что он выполнил поиск cmakeв вашем $PATH, но на самом деле это был неправильный результат, так как запуск cmakeна командная строка на самом деле , а не подберет его из/usr/local/bin(из-за кэширования,о котором whichне подозревали бы ).

Краткое изложение истории whichи подводных камней при его использовании можно найти здесь.:Почему бы не использовать «который»? Что тогда использовать?

2
28.01.2020, 02:29

Теги

Похожие вопросы