'쉘스크립트'에 해당되는 글 8건

  1. 2011.06.23 외부접속 확인하는 간단한 스크립트
  2. 2010.11.14 import를 사용하여 스크린샷 찍기 10
  3. 2010.06.20 Screenlet 에 현재 재생중인 음악파일 커버 출력시키기 6
  4. 2009.09.27 [시간알람] 시간.. 시간이 문제로다. 15
  5. 2009.01.12 Bash 쉘스크립트 배열 9

외부접속 확인하는 간단한 스크립트


ssh로 로긴해서 들어갔을때에도 무식하게 X를 당당히 띄어버리는 문제 발생.

그래서 아래 스크립트를 작성하여 일단 문젠 봉합해둠.

이하, 현재 쉘이 외부에서 접속했는지 확인하는 간단한 스크립트

#!/bin/bash
pts_id="pts/$(basename $(tty))"

# 쓸데없는 기교 (...)
if [ -n "$(who | grep -E ^"$USER"'.*'$pts_id'.*\([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\)$')" ];then
    echo "외부접속"
fi

일단은 잘 작동하는거 같은데... 함 두고보자.

import를 사용하여 스크린샷 찍기

import 스크린샷 찍을때 사용하는 프로그램인데 간단하고 좋다...

$import

하면 마우스커서의 모양이 십자가로 변하는데, 이때 프로그램의 윈도우를 찍어주거나,

선택한 영역을 드래그 하면, 지정한 영역만을 그림으로 저장해 준다. 블로그에 올릴 사진찍을때 정말 좋다 ㅋ

(이것도 있는지 안지는 꽤  됬는데.... 따로 스크립트는 만들어 주지 않고, 그냥 imagemagick으로

스크린샷 찍고 그랬다 -_-... 왜 그랬을까......)

먼저  import가 깔려있어야 하는데 ... Imagemagick 를 설치하면 알아서 깔린다

맨 페이지 보니깐 해당 프로그램의 멤버인듯.

스크립트는 다음과 같다

#!/bin/bash

SCREENSHOT_PROGRAM="import"
SCREENSHOT_PROGRAM_PID=$(pgrep "$SCREENSHOT_PROGRAM")
SCREENSHOT_SAVE_PATH="/home/lowid/etc/shot"

if [ "$SCREENSHOT_PROGRAM_PID"  = "" ];then
    "$SCREENSHOT_PROGRAM" "$SCREENSHOT_SAVE_PATH"/"$(date +"%F %r")".png &
else
    killall "$SCREENSHOT_PROGRAM"
fi

이걸 플빡이나 오박일경우 단축키로 지정해서 사용하면 편하다

한번누르면 grap을 시도하고, 한번 더 누르면 취소... 뭐 이런식으로 해놧다....

뭐 문제점이 몇개 있긴한데 어지간해선 그런일 일어나지 않을거 같아서 간단하게 작성했다

(너무너무 간단하다는... 달랑 if 문 하나라니 ㅋ)




ps; 스크린샷 찍을땐 compisite 없는 WM에서는 screenlets에 문제가 발생하므로 (검은 사각형)

딴 desklet을 쓰는게 좋을것이라고 생각....... 덕분에 나도 adesklets로 시계 바꿔버림 -_-

Screenlet 에 현재 재생중인 음악파일 커버 출력시키기

저번에 한번 conky자체에 그림나오는 기능을 사용해서 자켓 이미지를 출력하게 시도한 적이 있었다는..

http://lowid.tistory.com/entry/conky-%EA%B7%B8%EB%A6%BC

그런데 그때는... cpu를 너무 많이 먹는 바람에 하루정도 돌리고 포기...

그러다가 새로운  desklet을 한번 알게 되었는데 그게 바로 screenlet

이것을 좀 보니깐 python스크립트로 되어있는거라.. 좀 깨름직했지만...

(개인적으로  pstree 했을때 python 실행파일이 보이는것이 영 내키지 않아서)

그래도 어짜피 메모리 많이 남으니깐..

(전체 2긱인데 vm, firefox를 안돌리면 절대 200mb(각하의 100배임) 을 넘길일이 없으니)

그냥 쓰기로 해따.. 뭐 많은데 쓰지뭐

어쨋던 그렇게 하고.. screenlet 에 어떤 위젯(?) 이 있나 보니깐..

"SlideShow" 라는게 있어서 좀 살펴보니깐, 특정 디렉토리에 있는 그림파일을 출력해 주는 기능이 있었다는.

사용자 삽입 이미지

(Terminal lyrics, Slideshow, conky의 조화!!)

그래서 생각한게... 뭐 그냥 그 디렉토리에다가 현재 mpd로 재생중인 파일의 path을 알아내서

find로 찾아주면 간단하겠네.... 라는 생각이 들어서 바로 만들어 봤다..

find할때 재대로 안되는건 쿼우팅이 문제라서 따옴표를 붙여주고...

디렉토리 이름에 공백문자가 들어가서 생기는 문제는 IFS로 해결했다.

이러니깐 어지간한건 다 잡는듯.....

다음은 스크립트

#!/bin/bash

# MPD 설정 디렉토리
MPD_DIR="/data/mp3"

# 현재 재생중인 파일의 MPD 디렉토리
MPD_PATH=$(dirname "$(mpc -f "%file%" | head -n 1)")

# 자켓이 임시 복사될 디렉토리
JACKET_DIR="/home/lowid/etc/mpd_jacket"

# 현재 재생중인 파일의 디렉토리
PLAY_FILE_DIR="$MPD_DIR"/"$MPD_PATH"

# 경로에서 확장자가 jpg인것을 검색(작은따옴표 주의)
JACKET_FILES="$(find "$PLAY_FILE_DIR" -iname '*.jpg' -o -iname '*.png' -o -iname '*.gif')"

# 아까 있던 파일들 모두 삭제
rm -rf "$JACKET_DIR"/*

# IFS를 '\n'으로 변경(spc 방지)
IFS='
'

# 복사
for IMAGE_FILE in $JACKET_FILES
do
    echo "$IMAGE_FILE"
    cp "$IMAGE_FILE" "$JACKET_DIR"
done

그리고 이걸 곡이 바뀔때 마다 실행해 주면 된다 -_-..

나는 그냥 귀차나서 lyrics프로그램 내부에 mpd감지하는 루틴에

system("/home/lowid/bin/mpd_jacket.sh");

넣어버림 ㅋㅋㅋㅋㅋㅋㅋ


이래도 문제는 발생한다는거...

곡이 바뀌면서 바로 커버가 바뀌는게 아니라 몇초 딜레이 시간이 필요하다. (머 1초로 설정하면 거의 없긴해두)

(SlideShow의 자체 갱신 시간이 있기때문)

python 프로그램을 찾아서 갱신시간을 event로 알아낼수 있게 어떻게 수정하면 되긴하겠는데...

python 은 귀찮기도 하고............ 걍 PASS 귀차늠..

아니 윗에처럼 하느니.. 그냥 lyrics + cover + control이 되는 새로운 프로그램을 gtk로 만드는게 나을지도

근데 이것도 귀찮아서 아마 시도도 안할거임 아마..............

추가-----

find에서 exec로 해도 되는거 같은데 .;

[시간알람] 시간.. 시간이 문제로다.

여러분들은 컴터 할때 시간가는걸 느끼시나여?

저는 컴터 하는건 좋은데 막 하다보면 막 시간이 빨리가서.. 뭐랄까 가는 시간이 아깝달까...

그래서 시간가는걸 확실히 알기 위해서 Conky에다가 디지털 시계도 달아놓고

crontab을 이용해서 한시간마다 TTS로 시간 말해주는 그런뭐.. 그것도 썼는데..

의외로 효과과 미미 하더라고요...

디지털 시계로 시간을 보면 "아 지금 X시구낭" 하고 별 반응이 없게 되더라고요

그러니깐 지금 몇시인지는 아는데 "얼만큼 시간이 지났나?" 알기는 힘들어라구여..

글구 crontab으로 하는거..

# 한시간마다 screen lock
0       * * * * export DISPLAY=:0;/home/lowid/bin/screen_lock.sh

요런식으로 설정을 해서 한시간에 xlock을 띠우고 시간을 (aplay, wav재생) 하게 했는데

이건 한시간에 한번이라 -_-;; 별로..............

그리해서 해결책을 생각해 낸게

1 디지털 시계 버리고 아날로그 시계를 달자

2 1시간마다 시간을 말해게 하지말고 1분마다 시간을 말하게 하자...

해결과정....ㅋ
사용자 삽입 이미지

1 우리의 구글신님께 여쭈어(?) 보았습니다... 글자로는 언제 찾을지 몰라서 (심심하기도 했고) 이미지 검색을 해 봤는데

conky에서 font를 이용해서 아날로그 시계를 출력해주는 소스를 발견 했습니다..

http://floor.textcube.com/entry/my-conky-config?expandComment=1

그래서 이거 뚝딱 설정해서 conky에다가 시계 달기는 간편하게 성공했고

(뭐 덕분에 프로세스 왕장먹는 RSS기능 빼버렸...)

2 1분마다 말하게 하는거 취지는 좋은데 문제는 파일(시간 말해주는 파일) 이 없다는게 참 문제 더군여

기껏해야 정시알람음이 전부인게.. 안습...

그래서 어쩔수 없이 좀 오덕같이 보이긴 하지만, 꼬북님께서 몇달전에 제공해 주신 ARIA 캐릭의 목소리(...)를

이용하기로 했습니다.. 서비스팩(?) 같은 CD., 모르겠어요 확실한건..

제가 윈도우에서 이걸 실행해 본적이 없어서..............

어쨋던 윈도우용인데 파일은 다 wav로 존재하니깐 걍 뺴와서 쓰기로 했습니다..

1분 마다 실행하기 위해서 일단  crontab 에 등록 시켜 놓고..

# 매분 마다 시간 말해줌
*       * * * *  /home/lowid/bin/time_spech.sh

다음과 같이 간단한 쉘스크립트를 만들고.. (간단한거니깐 설명은 생략~)

#!/bin/bash

WAV_DIRECTORY="/home/lowid/etc/time_wav/aria/Akari"
WAV_BASENAME="AA"
WAV_BASENAME_HOUR="H"
WAV_BASENAME_MINUTE="M"

NOW_HOUR=$(date +%I)
NOW_MINUTE=$(date +%M)

pgrep mplayer # 동영상 재생이 아니면

if [ $? -eq 1 ];then
    aplay "$WAV_DIRECTORY"/"$WAV_BASENAME""$WAV_BASENAME_HOUR""$NOW_HOUR".wav "$WAV_DIRECTORY"/"$WAV_BASENAME""$WAV_BASENAME_MINUTE""$NOW_MINUTE".wav 2>/dev/null
fi

하면 알아서 매분 시간을 말해주게 됩니당...

좀 오덕같이 보여서 그렇지 사실.. 좋긴 좋음...

오늘 버닝 해서 포스팅 3개나 했네염 ㅋㅋ 댓글좀 달아주셈 ㅋㅋ

Bash 쉘스크립트 배열

혹시해서 적어두지만

bash쉘스크립트에서는 따로 자료형이 정해지지 않았기 때문에 그냥

아무변수나 배열처럼 쓸수있다.

배열 대입
episode_array[0]="abc"
episode_array[1]="def"

배열출력
echo ${episode_array[0]}
echo ${episode_array[1]}
# 덧> 쿼우팅은 알아서 할것!

배열 삭제
unset 명령어 이용, 한다고 합니다 아직 사용해 보진 않음;;
unset episode_array
unset eposode_array[0]

배열 전체 길이 구하기 (첨자길이)
${#episode_array[@]}
$(#episode_array[1]} # 이게 1번 array 길이 구하는거였나?

배열A를 배열 B로 복사
B=("${A[@]")


배열의 첨자(인덱스) 안에 @,* 들어가는거는 IFS에서 $*와 $@ 와 비슷하다고 한다'

함수를 쓸떄 아규먼트로 보내기

Movie_Choice "${episode_array[@]}"

이렇게 쓰면
function Move_Choice()
{
     echo "$1"      #episode_array[0]
     echo "$2"      #episode_array[1]
     echo "#3"      #episode_array[2]
}
 

이상하게 배열자체를 함수로 넘기질 못하겠네;

이거 아시는분은 댓글을!!!

Movie_Choice ("${A[@]")

이게 안먹히기 때문에

function Movie_Choice()
{
     array2=( "$@" )
}

Movie_Choice ${episode_array[@]}


이렇게 사용하고 있다..;; 이거분명 넘기는 방법이 있을텐데 모르겠음

아나 귀차너 그냥 전역으로 쓰고 때려지우는게 나을듯
prev 1 2 next