상위 폴더를 보려면 "ls -l ..$(which bash)"를 사용하십시오.

상위 폴더를 보려면 "ls -l ..$(which bash)"를 사용하십시오.

내가 작업중인 bash를 확인했습니다.

$ which bash
/usr/local/bin/bash
$ ls -l $(which bash)
lrwxr-xr-x 1 me 30 Oct 27 10:40 /usr/local/bin/bash -> ../Cellar/bash/4.4.23/bin/bash

그런 다음 bash의 상위 디렉토리를 확인합니다.usr/local/bin/

$ ls -l ../$(which bash)
ls: cannot access '..//usr/local/bin/bash': No such file or directory
$ ls -l ..$(which bash)
ls: cannot access '../usr/local/bin/bash': No such file or directory

불행하게도 나는 또 다른 실수를 저질렀습니다.

명령 대체 $를 사용하여 bash에서 상위 폴더로 이동하는 방법은 무엇입니까?

답변1

당신이하고있는 일은 종료하지 않고 실행하려고하는 것입니다 ls...//usr/local/bin/bash

$ echo ../$(which bash)
..//usr/local/bin/bash

또한 을 사용하면 ls -l ..$(which bash)상대 주소를 지정하므로 현재 작업 디렉터리의 위치에 따라 결과가 달라집니다.

따라서 이것은 오류를 발생시키지 않아야 합니다(상위 디렉토리가 아닌 파일을 찾습니다).

$ cd /usr
$ ls -ld ../$(which bash)

dirname다음 명령을 사용해야 합니다 .

$ dirname $(which bash)
/bin

또는:

$ ls -ld $(dirname $(which bash))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin

파일이 링크된 경우(예: 귀하의 경우 bash, 제 경우 sh):

$ ls -ld $(dirname $(readlink -f $(which sh)))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin

답변2

기술적으로, 를 사용해도 실제로 실행 중인 버전이 which bash항상 반환되는 것은 아닙니다 bash. 다른 버전을 실행하고 있지만 다른 버전이 포함된 경로를 사용할 수도 있습니다. Linux에서는 ( 프로세스 ID 또는 실행 중인 셸)을 proc사용하여 파일 시스템에서 실행 중인 셸의 실행 파일을 얻을 수 있으므로 원하는 것은 다음과 같습니다./proc/$$/exe$$

$(dirname $(readlink /proc/$$/exe))

관련 정보