새 터미널 창에서 스크립트 실행

새 터미널 창에서 스크립트 실행

현재 창을 사용 가능한 상태로 유지하면서 다른 터미널 창에서 상위 스크립트와 별도로 스크립트를 실행하고 싶습니다.

그 이유는 사용자가 디렉터리의 변경 사항을 감시하는 감시 스크립트를 실행할 수 있도록 허용하고 싶기 때문입니다.

그건 내 책임이야

function watchFunction ()
{
  ./watch.sh &
}    

그러나 이는 현재 창의 배경에서만 계속 실행됩니다.

Linux 배포판으로 인해 genone-terminal 또는 기타 설치 가능한 도구를 사용하거나 설치할 수 없습니다.

bash 스크립팅을 이제 막 시작했기 때문에 어떤 조언이라도 도움이 될 것입니다!

답변1

스크립트 출력만 보고 싶다면 스크립트 출력을 파일로 리디렉션하고 다른 창에서 해당 파일을 볼 수 있습니다.

# Run the script and log all output to a file
./watch.sh &> /var/log/watch.log &

# Watch the file, possibly in another terminal window
tail -f /var/log/watch.log

내 경험상 이 동작(로그 파일에 쓰기)은 매우 일반적입니다. 다른 터미널 창을 생성하기 시작한 명령줄 응용 프로그램을 사용한 기억이 없습니다.

즉, 명령줄에서 새 터미널 창을 열려면 터미널 응용 프로그램에 따라 달라집니다. AskUbuntu StackExchange 사이트에는 이에 대한 좋은 기사가 있습니다.

특히 참조이 답변. 예를 들어 Gnome 터미널의 경우 다음 명령을 사용할 수 있습니다.

gnome-terminal -x sh -c "./watch.sh; bash"

어떤 터미널 응용 프로그램이 사용되고 있는지 프로그래밍 방식으로 확인하려면 다음 AskUbuntu 게시물을 참조하세요.

허용되는 솔루션은 다음 기능을 정의합니다.

which_term(){
    term=$(perl -lpe 's/\0/ /g' \
           /proc/$(xdotool getwindowpid $(xdotool getactivewindow))/cmdline)

    ## Enable extended globbing patterns
    shopt -s extglob
    case $term in
        ## If this terminal is a python or perl program,
        ## then the emulator's name is likely the second 
        ## part of it
        */python*|*/perl*    )
         term=$(basename "$(readlink -f $(echo "$term" | cut -d ' ' -f 2))")
         version=$(dpkg -l "$term" | awk '/^ii/{print $3}')
         ;;
        ## The special case of gnome-terminal
        *gnome-terminal-server* )
          term="gnome-terminal"
        ;;
        ## For other cases, just take the 1st
        ## field of $term
        * )
          term=${term/% */}
        ;;
     esac
     version=$(dpkg -l "$term" | awk '/^ii/{print $3}')
     echo "$term  $version"
}

답변2

귀하의 의견에 따르면 xfce4-terminal을 사용하고 있습니다. 그것에서매뉴얼 페이지, 다음 옵션을 볼 수 있습니다

−x, −−execute
Execute the remainder of the command line inside the terminal

따라서 간단히 추가할 수 있습니다 ./watch.sh.

function watchFunction ()
{
  xfce4-terminal -x ./watch.sh &
}  

답변3

글쎄, 나는 이것을 내가 작성한 스크립트에 구현했습니다. 명령을 실행하기 전에 터미널 창을 시작해야 합니다.

xterm -e sh -c path/yo/your/script &;

내가 작성한 스크립트에서는 다음과 같은 것을 사용했습니다.

terminal="xterm"

run () {
    cmd="$terminal -e sh -c $1"
    [ -n "$1" ] && (eval "$cmd") > /dev/null 2>&1 &
}

run $VISUAL example/file/name

그러면 프로그램을 실행할 터미널이 시작됩니다. 또한 첫 번째 터미널이 새 창에서 stderr/stdout 메시지로 가득 차는 것을 방지합니다.

terminal변수를 사용하거나 좋아하는 변수로 바꾸 십시오 .

관련 정보