
내 bash 스크립트에는 몇 가지 기능이 있으며 bash 스크립트 내에서 기능을 실행하려면 하나의 tmux 창이 필요합니다. 예를 들어 아래 코드는 작동하지 않으며 "internal" 명령을 찾을 수 없다고 보고됩니다.
common() {
internal() {
echo "Function executed"
}
SESSIONNAME="ses"
tmux new-session -s $SESSIONNAME -n session -d
tmux split-window -t $SESSIONNAME:0 -h
tmux send-keys 'internal' 'C-m'
tmux select-window -t $SESSIONNAME:0
tmux attach -t $SESSIONNAME
}
그렇다면 tmux 창이 호출된 스크립트에서 함수를 실행하도록 tmux에 어떻게 알릴 수 있습니까?
답변1
함수를 인수로 사용하고 'send-keys'를 사용하여 tmux 세션에 로드하는 bash 함수를 작성했습니다. 분명히 수신하는 tmux 창은 이 함수가 실행될 때 bash 또는 호환되는 항목을 실행해야 합니다.
_pass_to_tmux() {
_FUNC_TO_PASS="${1}"
_IFS_BACKUP="${IFS}"
IFS=$'\n'
for i in $(type ${_FUNC_TO_PASS} | tail -n +2); do
tmux send-keys "${i}" C-m
done
IFS="${_IFS_BACKUP}"
}
답변2
내가 아는 한, 쉘 함수를 tmux 인스턴스로 내보낼 수 없습니다. 적어도 tmux 매뉴얼 페이지의 1.9 버전에는 이에 대한 참조가 없습니다.
tmux 세션을 생성하는 스크립트의 컨텍스트가 tmux 세션 내의 컨텍스트와 완전히 다르기 때문에 이것이 전혀 가능하지 않다고 생각합니다. 따라서 이러한 기능에 대한 지식조차 가질 수 없습니다. 또한 tmux는 사용 중인 쉘과 다른 쉘을 사용할 수도 있습니다.
그러나 몇 가지 대안을 제공하기 위해 다음 중 하나를 수행할 수 있습니다.
- 다른 스크립트를 작성하고
internal
그 안에 함수를 넣은 다음 대신 사용하세요. - 쓰기도서관모든 기능을 포함하지만 다른 것은 포함하지 않는 스크립트,
source
해당 라이브러리 스크립트애플리케이션스크립트를 사용하면 해당 기능을 사용할 수 있고 대신 이러한 응용 프로그램 스크립트를 사용할 수 있습니다.
두 번째 대안은 또한 더 많은 코드 위생과 더 나은 재사용성을 제공합니다.