새 gnome 터미널 창을 열고 별칭 명령을 실행하는 bash 스크립트를 작성하려고 합니다. 별칭을 사용하는 대신 함수를 사용하는 것이 올바른 방법이라는 것을 알았습니다. 두 가지 접근 방식을 모두 시도했지만 명령이 인식되지 않는다는 오류가 발생하여 작동하지 않습니다.
이것이 내가 가진 것입니다.
#!/bin/bash
# Cluster related functions
function gateway () {
ssh user@something -t ssh gateway
}
gnome-terminal --window-with-profile=Bash -- bash -c "gateway; bash;"
내가 얻는 오류는 다음과 같습니다.
bash: gateway: command not found
답변1
가장 간단한 해결책은 다음을 호출하기 전에 함수를 내보내는 것입니다 gnome-terminal
.
export -f gateway
노트:
별칭은 내보낼 수 없습니다.
함수 내보내기는 이식 가능한 기능이 아닙니다.
bash
에서 까지 작동합니다bash
.새 항목이 이전 항목 (함수를 내보낸 경우)
bash
의 자손 인 경우에는 자연스럽게 작동합니다 .bash
예를 들어gnome-terminal
이전 버전에서 상속받고bash
새 버전bash
이gnome-terminal
. 이는 이전 버전bash
이 아닌 터미널에서 실행될 때 발생합니다gnome-terminal
.내 테스트에서는
gnome-terminal
내부에서 실행 되면gnome-terminal
(환경에GNOME_TERMINAL_*
변수가 포함됨) 새gnome-terminal
프로세스가 작업을 이미 실행 중인 프로세스에 위임gnome-terminal
하고 종료한다는 것을 나타냅니다. 새로운 환경으로의 자연적인 환경 상속은bash
발생할 수 없지만, 새로운gnome-terminal
프로세스는 명령뿐만 아니라 환경까지 전달할 만큼 충분히 똑똑합니다. 이런 식으로bash
old 내부의 new는gnome-terminal
old의 자손처럼 동작하고bash
내보낸 기능이 작동합니다. 3.28.2 로 테스트되었습니다gnome-terminal
.