[Çözüldü] conkyInstall.sh "bad substitution" hatası

Başlatan szgnblt, 05 Haziran 2018 - 02:12:46

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

szgnblt

nerde hata yapıyorum?

#!/bin/bash
#date :20180605
#author : szgnblt
#=======================


sudo add-apt-repository ppa:teejee2008/ppa
sudo apt update
sudo apt install conky

echo "
conky.config = {
update_interval = 1,
cpu_avg_samples = 2,
net_avg_samples = 2,
out_to_console = false,
override_utf8_locale = true,
double_buffer = true,
no_buffers = true,
text_buffer_size = 32768,
imlib_cache_size = 0,
own_window = true,
own_window_type = 'normal',
own_window_argb_visual = true,
own_window_argb_value = 50,
own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
border_inner_margin = 5,
border_outer_margin = 0,
xinerama_head = 1,
alignment = 'bottom_right',
gap_x = 0,
gap_y = 33,
draw_shades = false,
draw_outline = false,
draw_borders = false,
draw_graph_borders = false,
use_xft = true,
font = 'Ubuntu Mono:size=12',
xftalpha = 0.8,
uppercase = false,
default_color = 'white',
own_window_colour = '#000000',
minimum_width = 300, minimum_height = 0,
alignment = 'top_right',

};
conky.text = [[
${time %H:%M:%S}${alignr}${time %d-%m-%y}
${voffset -16}${font sans-serif:bold:size=18}${alignc}${time %H:%M}${font}
${voffset 4}${alignc}${time %A %B %d, %Y}
${font}${voffset -4}
${font sans-serif:bold:size=10}SYSTEM ${hr 2}
${font sans-serif:normal:size=8}$sysname $kernel $alignr $machine
Host:$alignr$nodename
Uptime:$alignr$uptime
File System: $alignr${fs_type}
Processes: $alignr ${execi 1000 ps aux | wc -l}

${font sans-serif:bold:size=10}CPU ${hr 2}
${font sans-serif:normal:size=8}${execi 1000 grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/\s//'}
${font sans-serif:normal:size=8}${cpugraph cpu1}
CPU: ${cpu cpu1}% ${cpubar cpu1}

${font sans-serif:bold:size=10}MEMORY ${hr 2}
${font sans-serif:normal:size=8}RAM $alignc $mem / $memmax $alignr $memperc%
$membar
SWAP $alignc ${swap} / ${swapmax} $alignr ${swapperc}%
${swapbar}

${font sans-serif:bold:size=10}DISK USAGE ${hr 2}
${font sans-serif:normal:size=8}/ $alignc ${fs_used /} / ${fs_size /} $alignr ${fs_used_perc /}%
${fs_bar /}

${font Ubuntu:bold:size=10}NETWORK ${hr 2}
${font sans-serif:normal:size=8}Local IPs:${alignr}External IP:
${execi 1000 ip a | grep inet | grep -vw lo | grep -v inet6 | cut -d \/ -f1 | sed 's/[^0-9\.]*//g'}  ${alignr}${execi 1000  wget -q -O- http://ipecho.net/plain; echo}
${font sans-serif:normal:size=8}Down: ${downspeed enp0s3}  ${alignr}Up: ${upspeed enp0s3}
${color lightgray}${downspeedgraph enp0s3 80,130 } ${alignr}${upspeedgraph enp0s3 80,130 }$color
${font sans-serif:bold:size=10}TOP PROCESSES ${hr 2}
${font sans-serif:normal:size=8}Name $alignr PID   CPU%   MEM%${font sans-serif:normal:size=8}
${top name 1} $alignr ${top pid 1} ${top cpu 1}% ${top mem 1}%
${top name 2} $alignr ${top pid 2} ${top cpu 2}% ${top mem 2}%
${top name 3} $alignr ${top pid 3} ${top cpu 3}% ${top mem 3}%
${top name 4} $alignr ${top pid 4} ${top cpu 4}% ${top mem 4}%
${top name 5} $alignr ${top pid 5} ${top cpu 5}% ${top mem 5}%
${top name 6} $alignr ${top pid 6} ${top cpu 6}% ${top mem 6}%
${top name 7} $alignr ${top pid 7} ${top cpu 7}% ${top mem 7}%
${top name 8} $alignr ${top pid 8} ${top cpu 8}% ${top mem 8}%
${top name 9} $alignr ${top pid 9} ${top cpu 9}% ${top mem 9}%
${top name 10} $alignr ${top pid 10} ${top cpu 10}% ${top mem 10}%
]];" > ~/.conkyrc

mhmtkrktr

#1
1: grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/\s//' Bunu uçbirime yazarsan, bu bir komut olarak yorumlanır ve sonucu verilir. Fakat istediğin bu sonucu başka bir komutla yazdırmak ise, bunun yazılması gereken bir kelime değilde sonucu istenen bir komut olduğunu kabuğa belirtmen gerekir.

$(komut)  == komut bir komuttur
$(komut1 | komut2) == komut1 ve komut2 bir blok komuttur

örnek :
echo "İşlemcim : grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/\s//'" # içerik komut değil metin olarak değerlendirilir
echo "İşlemcim : $(grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/\s//')" # içerik metin değil komut olarak yürütülür ve sonucu basılır


2: ${time %H:%M:%S}${alignr}${time %d-%m-%y} ve benzer diğer satırlar. Bash için bir kelimenin başında dolar ($) işareti varsa, bu normal bir kelime değil değişkendir. Bash bu değişkenin daha önce atanıp atanmadığına, bir değeri olup olmadığına bakmaz. Karşılığı ne ise onu yazar. Boş ise boş geçer. Bunları metin olarak yazmanın iki yolu var. İlki metin olarak yazılmasını istediğin her $ işaretinin önüne ters slash ( \$ ) koymak. İkincisi üçte.

abc == abc bir metindir
$abc == abc bir değişkendir
${abc} == abc bir blok değişkendir

Örnek:
echo "abc deneme" # snc : abc deneme  ** abc düz bir metin
echo "$abc deneme" # snc : deneme   ** abc bir değişken fakat değişkenin bir değeri yok
abc=Ubuntu
echo "$abc deneme" # snc : Ubuntu deneme  ** abc nin artık yukarda verdiğimiz bir değeri var
echo "$abcdeneme"  # snc : boş ** abcdeneme diye bir değişken tanımlamadık
echo "${abc}deneme" # snc : Ubuntudeneme  ** kelimeler birleşti fakat biz abc yi ayrı algıla demiş olduk.


3: echo "yazılacak içerik" Bash da çift tırnak içeriği yorumlayarak oku anlamına gelir.  Yukarıda ki değişkenlerde olduğu gibi abc bir değişkendi ve bash tarafından yorumlandı. Echo da bize abc nin yorumlanmış değerini yani karşılığını yazdı. Eğer içeriğin yorumlanmadan doğrudan metin olarak okunması isteniyorsa tek tırnak ( 'yazılacak içerik' ) içine alınabilir.

Örnek:
Ubuntu=UbuntuTR
echo "$Ubuntu Forum"  # snc : UbuntuTR Forum
echo '$Ubuntu Forum' # snc : $Ubuntu Forum


İlave olarak birde sende ki gibi özel durumlar var. Aynı zaman da hem yorum hemde düz metin olarak algılananacak yerleri bulunan karışık bir içerik.
Ubuntu=UbuntuTR
echo ''"$Ubuntu"' Foruma en son '"$(date +%A)"' $günü girdim'


#!/bin/bash
#date :20180605
#author : szgnblt
#=======================


sudo add-apt-repository ppa:teejee2008/ppa
sudo apt update
sudo apt install conky

echo '
conky.config = {
update_interval = 1,
cpu_avg_samples = 2,
net_avg_samples = 2,
out_to_console = false,
override_utf8_locale = true,
double_buffer = true,
no_buffers = true,
text_buffer_size = 32768,
imlib_cache_size = 0,
own_window = true,
own_window_type = "normal",
own_window_argb_visual = true,
own_window_argb_value = 50,
own_window_hints = "undecorated,below,sticky,skip_taskbar,skip_pager",
border_inner_margin = 5,
border_outer_margin = 0,
xinerama_head = 1,
alignment = "bottom_right",
gap_x = 0,
gap_y = 33,
draw_shades = false,
draw_outline = false,
draw_borders = false,
draw_graph_borders = false,
use_xft = true,
font = "Ubuntu Mono:size=12",
xftalpha = 0.8,
uppercase = false,
default_color = "white",
own_window_colour = "#000000",
minimum_width = 300, minimum_height = 0,
alignment = "top_right",

};
conky.text = [[
${time %H:%M:%S}${alignr}${time %d-%m-%y}
${voffset -16}${font sans-serif:bold:size=18}${alignc}${time %H:%M}${font}
${voffset 4}${alignc}${time %A %B %d, %Y}
${font}${voffset -4}
${font sans-serif:bold:size=10}SYSTEM ${hr 2}
${font sans-serif:normal:size=8}$sysname $kernel $alignr $machine
Host:$alignr$nodename
Uptime:$alignr$uptime
File System: $alignr${fs_type}
Processes: $alignr ${execi 1000 ps aux | wc -l}

${font sans-serif:bold:size=10}CPU ${hr 2}
${font sans-serif:normal:size=8}${execi 1000 '"$(grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/s//'|xargs)"'}
${font sans-serif:normal:size=8}${cpugraph cpu1}
CPU: ${cpu cpu1}% ${cpubar cpu1}

${font sans-serif:bold:size=10}MEMORY ${hr 2}
${font sans-serif:normal:size=8}RAM $alignc $mem / $memmax $alignr $memperc%
$membar
SWAP $alignc ${swap} / ${swapmax} $alignr ${swapperc}%
${swapbar}

${font sans-serif:bold:size=10}DISK USAGE ${hr 2}
${font sans-serif:normal:size=8}/ $alignc ${fs_used /} / ${fs_size /} $alignr ${fs_used_perc /}%
${fs_bar /}

${font Ubuntu:bold:size=10}NETWORK ${hr 2}
${font sans-serif:normal:size=8}Local IPs:${alignr}External IP:
${execi 1000 '"$(ip a | grep inet | grep -vw lo | grep -v inet6 | cut -d \/ -f1 | sed 's/[^0-9\.]*//g')"'}  ${alignr}${execi 1000  wget -q -O- http://ipecho.net/plain; echo}
${font sans-serif:normal:size=8}Down: ${downspeed enp0s3}  ${alignr}Up: ${upspeed enp0s3}
${color lightgray}${downspeedgraph enp0s3 80,130 } ${alignr}${upspeedgraph enp0s3 80,130 }$color
${font sans-serif:bold:size=10}TOP PROCESSES ${hr 2}
${font sans-serif:normal:size=8}Name $alignr PID   CPU%   MEM%${font sans-serif:normal:size=8}
${top name 1} $alignr ${top pid 1} ${top cpu 1}% ${top mem 1}%
${top name 2} $alignr ${top pid 2} ${top cpu 2}% ${top mem 2}%
${top name 3} $alignr ${top pid 3} ${top cpu 3}% ${top mem 3}%
${top name 4} $alignr ${top pid 4} ${top cpu 4}% ${top mem 4}%
${top name 5} $alignr ${top pid 5} ${top cpu 5}% ${top mem 5}%
${top name 6} $alignr ${top pid 6} ${top cpu 6}% ${top mem 6}%
${top name 7} $alignr ${top pid 7} ${top cpu 7}% ${top mem 7}%
${top name 8} $alignr ${top pid 8} ${top cpu 8}% ${top mem 8}%
${top name 9} $alignr ${top pid 9} ${top cpu 9}% ${top mem 9}%
${top name 10} $alignr ${top pid 10} ${top cpu 10}% ${top mem 10}%
]];' > ~/.conkyrc


szgnblt

Denemesi yapmadım ama emeğine klavyene sağlık.


Tapatalk kullanarak iPhone aracılığıyla gönderildi


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 05 Haziran 2018 - 22:15:42

Sayın mhmtkrktr teşekkür ederim. Diğer arkadaşlarında faydalanması için scripti aşağıda paylaşıyorum.

#!/bin/bash
#=======================================
# date : 20180605
# author : szgnblt
# filename : conkyInstall.sh
#=======================================


sudo add-apt-repository ppa:teejee2008/ppa
sudo apt update
sudo apt install conky

echo '
conky.config = {
update_interval = 1,
cpu_avg_samples = 2,
net_avg_samples = 2,
out_to_console = false,
override_utf8_locale = true,
double_buffer = true,
no_buffers = true,
text_buffer_size = 32768,
imlib_cache_size = 0,
own_window = true,
own_window_type = "normal",
own_window_argb_visual = true,
own_window_argb_value = 50,
own_window_hints = "undecorated,below,sticky,skip_taskbar,skip_pager",
border_inner_margin = 5,
border_outer_margin = 0,
xinerama_head = 1,
alignment = "bottom_right",
gap_x = 0,
gap_y = 33,
draw_shades = false,
draw_outline = false,
draw_borders = false,
draw_graph_borders = false,
use_xft = true,
font = "Ubuntu Mono:size=12",
xftalpha = 0.8,
uppercase = false,
default_color = "white",
own_window_colour = "#000000",
minimum_width = 300, minimum_height = 0,
alignment = "top_right",

};
conky.text = [[
${time %H:%M:%S}${alignr}${time %d-%m-%y}
${voffset -16}${font sans-serif:bold:size=18}${alignc}${time %H:%M}${font}
${voffset 4}${alignc}${time %A %B %d, %Y}
${font}${voffset -4}
${font sans-serif:bold:size=10}SYSTEM ${hr 2}
${font sans-serif:normal:size=8}$sysname $kernel $alignr $machine
Host:$alignr$nodename
Uptime:$alignr$uptime
File System: $alignr${fs_type}
Processes: $alignr ${execi 1000 ps aux | wc -l}

${font sans-serif:bold:size=10}CPU ${hr 2}
${font sans-serif:normal:size=8}${execi 1000 '"$(grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/s//'|xargs)"'}
${font sans-serif:normal:size=8}${cpugraph cpu1}
CPU: ${cpu cpu1}% ${cpubar cpu1}

${font sans-serif:bold:size=10}MEMORY ${hr 2}
${font sans-serif:normal:size=8}RAM $alignc $mem / $memmax $alignr $memperc%
$membar
SWAP $alignc ${swap} / ${swapmax} $alignr ${swapperc}%
${swapbar}

${font sans-serif:bold:size=10}DISK USAGE ${hr 2}
${font sans-serif:normal:size=8}/ $alignc ${fs_used /} / ${fs_size /} $alignr ${fs_used_perc /}%
${fs_bar /}

${font Ubuntu:bold:size=10}NETWORK ${hr 2}
${font sans-serif:normal:size=8}Local IPs:${alignr}External IP:
${execi 1000 '"$(ip a | grep inet | grep -vw lo | grep -v inet6 | cut -d \/ -f1 | sed 's/[^0-9\.]*//g')"'}  ${alignr}${execi 1000  wget -q -O- http://ipecho.net/plain; echo}
${font sans-serif:normal:size=8}Down: ${downspeed enp0s3}  ${alignr}Up: ${upspeed enp0s3}
${color lightgray}${downspeedgraph enp0s3 80,130 } ${alignr}${upspeedgraph enp0s3 80,130 }$color
${font sans-serif:bold:size=10}TOP PROCESSES ${hr 2}
${font sans-serif:normal:size=8}Name $alignr PID   CPU%   MEM%${font sans-serif:normal:size=8}
${top name 1} $alignr ${top pid 1} ${top cpu 1}% ${top mem 1}%
${top name 2} $alignr ${top pid 2} ${top cpu 2}% ${top mem 2}%
${top name 3} $alignr ${top pid 3} ${top cpu 3}% ${top mem 3}%
${top name 4} $alignr ${top pid 4} ${top cpu 4}% ${top mem 4}%
${top name 5} $alignr ${top pid 5} ${top cpu 5}% ${top mem 5}%
${top name 6} $alignr ${top pid 6} ${top cpu 6}% ${top mem 6}%
${top name 7} $alignr ${top pid 7} ${top cpu 7}% ${top mem 7}%
${top name 8} $alignr ${top pid 8} ${top cpu 8}% ${top mem 8}%
${top name 9} $alignr ${top pid 9} ${top cpu 9}% ${top mem 9}%
${top name 10} $alignr ${top pid 10} ${top cpu 10}% ${top mem 10}%
]];' > ~/.conkyrc

echo '[Desktop Entry]
Type=Application
Exec=/usr/bin/conky
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=Conky System Monitoring
Name=Conky System Monitoring
Comment[en_US]=Conky System Monitoring
Comment=Conky System Monitoring' > ~/.config/autostart/conky.desktop

mhmtkrktr

#3
Rica ederim. Öncelikle belirteyim conky ayarları konusunda bilgi sahibi değilim. İşin hata bölümüyle ilgilenirken, içeriğin çalışma prensibini atlamışım aslında. İp konusu dikkatimi çekince küçük bir araştırma gereği duydum. Sonuç olarak benim değil senin uygulama şeklin doğruymuş.

${execi 1000 '"$(grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/s//'|xargs)"'}
${execi 1000 '"$(ip a | grep inet | grep -vw lo | grep -v inet6 | cut -d \/ -f1 | sed 's/[^0-9\.]*//g')"'}


Bu ( http://conky.sourceforge.net/variables.html ) listeye göre execi zaten kabuk komutu çalıştırmak için kullanılıyormuş. Dolayısıyla oraya komutun sonucunu değil doğrudan kendisini yazmak gerekiyor.

Fakat execi | süre | komut işleminin  ayarlanan süreye göre işlemciye yük olacağı, olabildiğince az kullanılması önerilmiş. Örneğin işlemci konusun da, kimsenin bilgisayar çalışırken işlemci değiştirmeyeceğini düşünürsek, aslında komutun her 1000 milisaniyede bir yenilenmesi yerine, conky başlangıcında sadece bir kez çalışması yeterli olacaktır. Bunun için listede pre_exec komutu var.
Komutu da biraz değiştirerek şu şekilde denenebilir.
Alıntı Yap${execi 1000 '"$(grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/s//'|xargs)"'}
yerine
Alıntı Yap${pre_exec sed '/name/!d;s/.*: //' /proc/cpuinfo|uniq}
echo ile yazdırırken şu şekilde:
Alıntı Yap${pre_exec sed '\''/name/!d;s/.*: //'\'' /proc/cpuinfo|uniq}

İp okumak için ise, çalışma sırasında değişebileceği göz önüne alınarak yenilemeli mevcut komut kullanılabilir. Conky nin ağırlıkta sabit kullanıcı olacağı varsayımıyla bunun bile yenilenmesi ayrı tartışılır ama en azından 10000ms gibi daha uzun bir süre verilebilir. İp adresini öğrenme işini de hostname ile daha kısa bir komutla elde etmek mümkün.

Alıntı Yap${execi 1000 '"$(ip a | grep inet | grep -vw lo | grep -v inet6 | cut -d \/ -f1 | sed 's/[^0-9\.]*//g')"'}
yerine
Alıntı Yap${execi 1000 hostname -i}

Kendim deneme yapmadım. execi ve pre_exec konusu tercihe bağlı fakat komut kısımlarının metin olarak conkyrc içerisinde bulunacağı yeni bir düzenleme yapmak gerekecek.

szgnblt

Dün denemelerimde bende sistemin ağırlaşmasından bir hata olduğunu düşündüm. Kodlar üzerine çalışma yapmak yerine uygulamayı kapatmıştım. Vermiş olduğun bu ince detayı kodlar üzerinde güncelleme yaparak tekrar deneme yapacağım. Yeni kodları ve sh ayarları tekrar paylaşacağım. Teşekkürler


Tapatalk kullanarak iPhone aracılığıyla gönderildi