명령을 호출하면 help declare
다음이 표시됩니다.
-t NAME : to make NAMEs have the `trace' attribute
이 옵션의 사용법을 보여주는 예가 있습니까? 나는 이것이 set -o functrace
모든 기능이 아닌 매개변수에만 적용된다는 점을 제외하면 명령과 동일한 작업을 수행한다고 생각합니다 .
이 질문의 동기는 foo 함수가 트랩을 상속받기를 원한다는 것입니다. 그래서 시도했지만 declare -t foo
성공하지 못했습니다.
물론 set -o functrace
모든 함수가 트랩을 상속하도록 할 수도 있지만 어떤 경우에는 하나 또는 두 개의 함수만 트랩을 상속하기를 원합니다.
스크립트는 다음과 같습니다.
function foo {
var=1
var=2
var=3
}
declare -t foo
var=0
trap 'echo var is $var' DEBUG
foo
trap - DEBUG # turn off the DEBUG trap
다음은 스크립트의 출력입니다.
var is 0
var is 3
나는 다음과 같은 것을 얻을 것으로 기대합니다 :
var is 0
var is 1
var is 2
var is 3
답변1
declare -t foo
추적 속성 설정바꾸다 foo
(어쨌든 특수 효과는 없습니다). -f
다음을 사용하여 함수에서 설정 해야 합니다 .
declare -ft foo
을 사용하도록 스크립트를 수정한 후 -f
다음과 같은 출력을 얻습니다(주석 설명).
var is 0 # foo called
var is 0 # before the first command in function is run
var is 0 # var=1
var is 1 # var=2
var is 2 # var=3
var is 3 # trap ...