특정 문자로 시작하는 명령어 검색(현재 사용자의 경우)

특정 문자로 시작하는 명령어 검색(현재 사용자의 경우)

문자 g로 시작하는 모든 명령을 나열하려면 어떤 명령을 사용할 수 있습니까?

내가 읽고여기에 질문하세요그러나 나는 자의적인 제한이 없는 답을 추구합니다. 쉘 완성이 답변을 제공하는 경우 이를 포함해야 합니다.

그러나 많은/대부분의 쉘에서 작동하는 답변이 있다면 더 좋을 것입니다.

회의:

( set -f; find ${PATH//:/ } -type f -maxdepth 1 -executable )

적절한 답변인가요? 모든 사람이 find이러한 옵션을 모두 갖고 있는 것은 아닙니다 . 그렇죠?

답변1

find당신이 보여준 명령은,

( set -f; find ${PATH//:/ } -type f -maxdepth 1 -executable )

findGNU가 설치된 머신에서 실행 되기 때문에 대부분의 경우에 적합 합니다 -maxdepth.-executable진짜-executable표준 술어를 사용하기 위해 find동등한 테스트를 만들고 싶지 않습니다 .) 또한 bash의 값에 대한 매개변수 대체가 필요하며 PATH, 각 값을 :공백으로 변경해야 합니다. (이는 그대로 설정 IFS=:하고 따옴표 없이 변수를 사용하여 에 대한 요구 사항을 제거함으로써 수행할 수도 있습니다 bash.)

존재하다또 다른 대답비슷한 질문에 대해 find명령이 검색 경로를 잠재적인 옵션으로 해석하지 못하도록 보호했습니다 --. 여기에 표시된 명령은 동일한 접근 방식을 사용하며 IFS적절한 테스트를 거친 후 약간의 조정이 이루어졌습니다.

(
    set -f; IFS=:
    find -L -- $PATH -maxdepth 1 ! -type d -executable
) 

! -type d디렉터리가 아닌 실행 가능한 심볼릭 링크도 찾을 수 있는지 확인하세요 . 이 -L옵션은 발견된 기호 링크와 연관된 메타데이터가 링크가 가리키는 곳에서 가져오도록 보장합니다(이렇게 하면 액세스 가능한(즉, 실행 가능한) 하위 디렉토리가 있는 기호 링크가 발견되는 것을 방지합니다).

이를 테스트하면 위 명령의 결과와 겹치는 명령 목록이 생성되고 발견 된 다른 명령 은 외부 구현이 없는 내장 명령으로 제한된다는 compgen -c것을 알 수 있습니다 .bashcompgen -cfindcompgen -c

분명히 문자로 시작하는 명령으로 제한하려면 ( in ) g도 사용해야 합니다 .-name 'g*'compgen -c gbash

명령 탭 완성을 제공하는 셸(예: bash)은 이 메커니즘과 상호 작용하는 명령을 노출할 수 있습니다. 이러한 명령은 셸 간에 이식 가능하지 않으며 동일한 셸 버전 간에도 이식 가능하지 않을 수도 있습니다. 위 명령은 find탭 완성 기능에 대한 매우 좋은 근사치를 제공하는 것 같습니다.외부명령이 제공되지만 af GNU 존재 여부에만 따라 달라집니다 find.

-executable표준 조건자를 사용하여 조건자를 다시 작성하는 방법에 대한 자세한 내용은 find다음을 참조하세요.Stefan Chazeras의 답변또 다른 질문입니다( 와 관련이 있지만 -readable솔루션과 유사함 -executable).

-maxdepth술어도 비표준이지만 find명령의 변형으로 더 일반적으로 구현됩니다.

관련 정보