현재 창을 사용 가능한 상태로 유지하면서 다른 터미널 창에서 상위 스크립트와 별도로 스크립트를 실행하고 싶습니다.
그 이유는 사용자가 디렉터리의 변경 사항을 감시하는 감시 스크립트를 실행할 수 있도록 허용하고 싶기 때문입니다.
그건 내 책임이야
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
변수를 사용하거나 좋아하는 변수로 바꾸 십시오 .