[Çözüldü] Bash Scriptinden SIGTERM Göndermek

Başlatan FireSwords, 23 Temmuz 2016 - 11:31:08

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

FireSwords

Merhaba, terminal'de Matrix filmindeki karakterleri gösteren bir script buldum. Script'in çalışmasında bir sorun yok. Ama script'in her terminal penceresi açtığımda çalışıp 5 saniye sonra kapanmasını istiyorum. Script'in kodlarına baktığımda SIGTERM gönderildiğinde ekrandaki her şeyi temizleyip kapandığını görüyorum. Benim istediğim start.sh adında bir bash script'i oluşturup bu script üzerinden matrix scriptini çalıştırıp 5 saniye sonra SIGTERM göndermesini sağlamak. Bunu nasıl yapabilirim?

7hr33l3t73r

Su matrix kodlarini da gorseydik iyi olurdu ama ben kendim burada ki gorseli daha cok begendim. Acilista calistirmak icin de asagida ki komut kullanilabilir.
timeout 5s   sh -c ~/mat.sh; echo -ne "\033[?25h";clear
Burada  echo -ne "\033[?25h" komutunun gorevi. Matrix kodlari calistiginda (echo -e "\033[?25l") bu kod imlecimizi gizlemekte. Tekrar gorunur kilmak icin kullanagimiz komut oluyor kendisi. Sanirim boyle birsey olabilir sizin aradiginiz!
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html


mhmtkrktr

#!/bin/bash
#
# matrix: matrix-ish display for Bash terminal
# Author: Brett Terpstra 2012 <http://brettterpstra.com>
# Contributors: Lauri Ranta and Carl <http://blog.carlsensei.com/>
#
# A morning project. Could have been better, but I'm learning when to stop.

### Customization:
_by_neo () {

blue="\033[0;34m"
brightblue="\033[1;34m"
cyan="\033[0;36m"
brightcyan="\033[1;36m"
green="\033[0;32m"
brightgreen="\033[1;32m"
red="\033[0;31m"
brightred="\033[1;31m"
white="\033[1;37m"
black="\033[0;30m"
grey="\033[0;37m"
darkgrey="\033[1;30m"
# Choose the colors that will be used from the above list
# space-separated list
# e.g. `colors=($green $brightgreen $darkgrey $white)`
colors=($green $brightgreen)
### End customization

### Do not edit below this line
spacing=${1:-100} # the likelihood of a character being left in place
scroll=${2:-0} # 0 for static, positive integer determines scroll speed
screenlines=$(expr `tput lines` - 1 + $scroll)
screencols=$(expr `tput cols` / 2 - 1)

# chars=(a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ^)
# charset via Carl:
chars=(ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン)

count=${#chars[@]}
colorcount=${#colors[@]}

trap "tput sgr0; clear; exit" SIGTERM SIGINT

if [[ $1 =~ '-h' ]]; then
echo "Display a Matrix(ish) screen in the terminal"
echo "Usage: matrix [SPACING [SCROLL]]"
echo "Example: matrix 100 0"
exit 0
fi


clear
tput cup 0 0
while :
do for i in $(eval echo {1..$screenlines})
do for i in $(eval echo {1..$screencols})
do rand=$(($RANDOM%$spacing))
case $rand in
0)
printf "${colors[$RANDOM%$colorcount]}${chars[$RANDOM%$count]} "
;;
1)
printf "  "
;;
*)
printf "\033[2C"
;;
esac
done
printf "\n"

#sleep .005
done
tput cup 0 0
done
}
export -f _by_neo
timeout 3s bash -c '_by_neo'

FireSwords

Maalesef işe yaramadı. sh dosyasını çalıştırınca aşağıdaki çıktıyı aldım:

./matrix.sh: line 79: timeout: command not found

Son satırı

command -v timeout 3s bash -c '_by_neo'


olarak değiştirdim.

Sonuç:

arda@OS-X:~|⇒  ./matrix.sh
/bin/bash
_by_neo


Bu arada zsh kullanıyorum.

mhmtkrktr

zsh kabuğunu hiç kullanmadım. Bash kabuğunda senin istediğin şekilde çalışıyor. Komutu şu şekilde değiştirmeyi denedin mi?

timeout 3s zsh -c '_by_neo'
veya
timeout 3s sh -c '_by_neo'

İlk satırıda şu şekilde deneyebilirsin,

#!/bin/sh


7hr33l3t73r

Profilinde ki gibi OSX kullaniyorsan?

brew install coreutils
gtimeout
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

FireSwords

@7hr33l3t73r Evet OS X kullanıyorum. Paketi yükledim, @mhmtkrktr'in önerisine göre gtimeout 3s zsh -c '_by_neo' olarak değiştirdim. Aşağıdaki hatayı alıyorum:


zsh: no such file or directory: ./matrix.shgtime

Düzenleme:

gtimeout 3s sh -c '_by_neo'

Olarak değiştirince işe yaradı. Yardım eden herkese teşekkürler.

neynefes


ShangriLa

Bu basligi yeni gordum. Baska bir yol:


#!/bin/sh

bash /tmp/matrix.sh &
sleep 3
kill $!


Bunu bir shell dosyasi olarak kaydetip .profile icinde calistirabilirsin.
Ubuntu Mate Trusty