bash : gnome-terminal 탭을 여는 동안`bash -c` 명령에서 ~ / .bashrc 파일에 정의 된 함수를 호출 할 때 "명령을 찾을 수 없음"

가브리엘 스테이 플스

내가하려는 것 :

  1. 3 개의 탭을 여는 스크립트를 작성하십시오.
  2. cd 각 탭의 다른 폴더로 이동합니다 (예 : 고유 한 명령 실행).
  3. 각 탭에 고유 한 제목을 부여

이 스크립트를 사용하여 데스크톱에서 스크립트를 클릭하고 일상적인 개발 환경에서 원하는대로 터미널을 열 수 있도록합니다.

기술:

탭에서 실행할 고유 한 명령을 사용하여 3 개의 터미널 탭을 열어 보는 스크립트가 있습니다.

open_tabs.sh

#!/bin/bash

gnome-terminal --tab -- bash -c "source $HOME/.bashrc && set-title hey; exec bash"
gnome-terminal --tab -- bash -c "cd ~; exec bash"
gnome-terminal --tab

으로 실행하면 ./open_tabs.sh3 개의 새 탭 set-title이 열리지 만 안타깝게도 탭 제목을 설정하는 데 작동하지 않습니다! 열리는 탭에서 다음 오류가 발생합니다.

bash: set-title: command not found

나는 이와 같은 set-title기능으로 정의했습니다 ~/.bashrc. 그 목적은 터미널 창 상단에 제목 문자열을 설정하는 것입니다. 수동으로 사용할 때 완벽하게 작동합니다. 예 : set-title hey how are you?"hey how are you?" 터미널 창 상단에 있습니다.

# From: https://unix.stackexchange.com/questions/177572/how-to-rename-terminal-tab-title-in-gnome-terminal/566383#566383
set-title() {
    # If the length of string stored in variable `PS1_BAK` is zero...
    # - See `man test` to know that `-z` means "the length of STRING is zero"
    if [[ -z "$PS1_BAK" ]]; then
        # Back up your current Bash Prompt String 1 (`PS1`) into a global backup variable `PS1_BAK`
        PS1_BAK=$PS1 
    fi

    # Set the title escape sequence string with this format: `\[\e]2;new title\a\]`
    # - See: https://wiki.archlinux.org/index.php/Bash/Prompt_customization#Customizing_the_terminal_window_title
    TITLE="\[\e]2;$@\a\]"
    # Now append the escaped title string to the end of your original `PS1` string (`PS1_BAK`), and set your
    # new `PS1` string to this new value
    PS1=${PS1_BAK}${TITLE}
}

이 문제를 어떻게 해결합니까!? 나는 export노래하고 source노래를 시도했지만 내가 여기서 뭘 잘못하고 있는지 모르겠습니다.

관련 :

  1. 여러 탭이있는 터미널을 열고 각 탭에 대해 PS1 변수를 고유하게 수정하는 응용 프로그램을 실행합니다.
  2. https://unix.stackexchange.com/questions/177572/how-to-rename-terminal-tab-title-in-gnome-terminal/566383#566383
  3. 여러 탭이있는 터미널을 열고 응용 프로그램을 실행하십시오. <== 이것이 제가 실제로 해결하려는 문제이지만 gnome-terminal's --command( -e) 옵션은 이제 더 이상 사용되지 않습니다!

    # Option “--command” is deprecated and might be removed in a later version of gnome-terminal.
    # Use “-- ” to terminate the options and put the command line to execute after it.
    
디저트

bash가 ~/.bashrc시작시 읽고 실행하도록 하려면 대화 형 셸로 시작합니다.

gnome-terminal --tab -- bash -ic "set-title hey; exec bash"

이제 비대화 형 셸에서 파일을 소싱하는 방법이 작동하지 않는 이유는 무엇입니까? 나는 당신 ~/.bashrc이 다음과 같이 시작 한다고 강력히 가정합니다 .

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

이것은 그것이 return소싱 된 쉘이 그것의 어디에도“i”를 가지지 않는다면 $-, 즉 대화 형 쉘인 경우 아무것도하지 않고 그것을 가능하게 합니다. $-특수 매개 변수입니다 man bash.

-호출시, set내장 명령에 의해 지정된 현재 옵션 플래그 또는 쉘 자체에 의해 설정된 플래그 (예 : -i옵션)로 확장됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관