소프트 링크 변경 후 "명령 캐시"를 업데이트하는 방법은 무엇입니까?

소프트 링크 변경 후 "명령 캐시"를 업데이트하는 방법은 무엇입니까?

를 사용하여 내 시스템의 여러 소프트 링크를 변경했습니다 ln -f -s. 링크를 보면 ls -l올바른 대상을 가리키는 것을 알 수 있습니다.

그러나 명령을 실행하려고 하면 여전히 "이전" 대상을 사용하려고 합니다.

새로 생성된 소프트 링크를 사용하도록 시스템에 지시하기 위해 "명령 캐시"를 플러시하는 명령이 Linux에 있습니까?

예를 들어:

OPEN_MPI_PATH=/usr/lib64/mpi/gcc/openmpi
ln -f -s ${OPEN_MPI_PATH}/bin/mpirun  /usr/bin/mpirun
ls -l /usr/bin/mpirun
$ /usr/bin/mpirun -> /usr/lib64/mpi/gcc/openmpi/bin/mpirun

실행 mpirun -np 4 hello_world결과는 "오래된" 대상인 Intel MPI를 호출합니다.

답변1

나는 당신이 에서 발견한 것을 변경하는 것에 대해 이야기하고 있고 $PATH당신이 있는 쉘이 여전히 원래 프로그램을 시작하고 있다고 가정합니다.

그렇다면 당신이 찾고 있는 것은hash -r

$ help hash
hash: hash [-lr] [-p pathname] [-dt] [name ...]
    Remember or display program locations.

    Determine and remember the full pathname of each command NAME.  If
    no arguments are given, information about remembered commands is displayed.

    Options:
      -d            forget the remembered location of each NAME
      -l            display in a format that may be reused as input
      -p pathname   use PATHNAME is the full pathname of NAME
      -r            forget all remembered locations
      -t            print the remembered location of each NAME, preceding
                    each location with the corresponding NAME if multiple
                    NAMEs are given
    Arguments:
      NAME          Each NAME is searched for in $PATH and added to the list
                    of remembered commands.

    Exit Status:
    Returns success unless NAME is not found or an invalid option is given.

관련 정보