별명을 입력하여 모든 별명 목록을 표시 할 수 있습니다.
그러나 기능을 위해 내가 할 수있는 일은 grep my .bash_profile
입니다.
그것은 보조 파일에 정의되거나 동적으로 정의 된 파일이 아닌 해당 파일의 파일 만 가져옵니다.
현재 정의 된 기능을 찾는 더 편리한 방법이 있습니까?
별명을 입력하여 모든 별명 목록을 표시 할 수 있습니다.
그러나 기능을 위해 내가 할 수있는 일은 grep my .bash_profile
입니다.
그것은 보조 파일에 정의되거나 동적으로 정의 된 파일이 아닌 해당 파일의 파일 만 가져옵니다.
현재 정의 된 기능을 찾는 더 편리한 방법이 있습니까?
답변:
declare -F
내장 명령에 대한
-f
옵션 과 함께 기능 이름과 정의가 나열 될 수 있습니다declare
(배시 내장 참조).-F
하는 옵션declare
만 (선택적으로 소스 파일과 줄 번호)를 함수 이름을 나열합니다.
shopt -s extdebug
)를 활성화하고 하나 이상의 함수 이름을 declare -F
명령에 제공 해야합니다 . IOW declare -F
는 extdebug가 활성화되어 있어도 파일 이름 / 줄 번호를 제공 하지 않습니다 . 이는 문서에서 명확하지 않으며 특히 직관적 인 IMO입니다.
bash 쉘을 가정 :
typeset -f
기능을 나열합니다.
typeset -F
함수 이름 만 나열합니다.
Obsolete. See `help declare'.
declare -F
모든 기능의 이름을 알려줄 것입니다
type function_name
특정 기능의 소스를 제공합니다
declare -F
실제로 함수 이름뿐만 아니라 선언 명령을 인쇄합니다.
$ declare -F
declare -f function1
declare -f function2
compgen -A function
기능 이름 만 인쇄 하는 데 사용할 수 있습니다 .
$ compgen -A function
function1
function2
compgen -a -A function
compgen -A function | grep "^[a-z]\+" | grep -vE "^dequote|^quote|^in_array"
set | grep " ()"
grep 대신 fgrep 또는 hgrep을 사용할 수도 있습니다 (hgrep는 제가 개인적으로 좋아하는 것입니다. grep이지만 'grep-ped'결과를 강조 표시합니다.
hgrep 은 여기에서 찾을 수 있습니다 : ACME Labs hgrep
set | grep " () $" | cut -d' ' -f1
입니다.. 그러나 다른 답변에 비해 지나치게 복잡합니다.
grep
함수 정의와 일치하는 문자열은 오 탐지를 유발할 수 있습니다. @wjandrea는 여전히 모든 정규식과 마찬가지로 여러 줄 문자열에 의해 잡힐 수 있습니다.
나는 아직도 배우고,하지만 같은를 원하기 때문에 이후에이 문제를 발견하고 그 답이 없음 전문가는 아니지만, 내가 쓴 (이하 "을 기반으로 다음 전형적인 바울의 선언 "답) 나는 후였다 궁극적으로 무엇을 나에게 제공합니다 : 별명 및 함수의 형식화 된 목록 :
function functionaliaslist() {
echo
echo -e "\033[1;4;32m""Functions:""\033[0;34m"
declare -F | awk {'print $3'}
echo
echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
alias | awk {'print $2'} | awk -F= {'print $1'}
echo
echo -e "\033[0m"
}
그것은 Lri의 대답 을보기 전에 이루어 졌으므로 그로부터 외삽하여 대신에 declare
and alias
를 적절한 compgen
명령으로 바꿉니다 .
function functionaliaslist() {
echo
echo -e "\033[1;4;32m""Functions:""\033[0;34m"
compgen -A function
echo
echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
compgen -A alias
echo
echo -e "\033[0m"
}
내가 원하는 것에 대한 치료를 했어요. 다른 사람에게 도움이되는 경우 공유.
많은 다른 "조치"가 가능합니다 compgen -A [action]
( compgen
물론 다른 옵션도 있습니다 ). 나는 좋은 쓰기 업 발견 여기에 (때문에 또한 사람이 페이지에 대한 링크를 포함하는 man compgen
경우에 작동하지 않습니다).