Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Конзолни решения

Featured Replies

За тези които използват Google Drive.Програма за сваляне и качване на файлове в GDrive през конзолата.

Линк

  • Отговори 438
  • Прегледи 62,5k
  • Създадено
  • Последен отговор

Едно конзолно решение, което ми дойде като идея, преди неколко дни след като започнах да слушам нердовете gatakka и Stilgar :D

 

Скрипта/програмата не е нищо кой знае какво, но бачка здраво :P.

Това което прави е, да посещава тяхната уеб страница, взимайки всички url адреси за подкаст епизодите, и ги записва на един файл .m3u плейлист, който по късно бива стартиран с mplayer, и започва купона :P

 

линк за програмата > https://github.com/ivoarch/nerds2nerds

 

снимка:

 

h_1411926429_4346080_bf2083a680.png

Редактирано от ivoarch (преглед на промените)

Вдъхновен от този пост

 

Превключване на автоматично пренасяне на следващ ред (line-wrapping)

 

За емакс (emacs):

M-x <RET> toggle-truncate-lines <RET>

За гедит (gedit):

$> gsettings set org.gnome.gedit.preferences.editor wrap-mode none
$> gsettings set org.gnome.gedit.preferences.editor wrap-mode word

За лесс (less):

$> less
$> less -S

За терминал (gnome-terminal) и други приложения от терминала:

$> tput rmam
$> tput smam

Гну-скрейн (gnu-screen):

 

(C-a r) или  C-a : wrap on|off

 

Допълнете ...

  • 3 седмици по-късно...

Bash скрипт за световното време, от терминала :P

 

запазете като например: wtime.sh

след което направете скрипта изпълнилним: chmod +x wtime.sh

стартирайте ./wtime.sh

 

h_1414412109_6575247_d596a02d58.png

 

Ако искате да добавите още, хвърлете едно око на директорията /usr/share/zoneinfo или направете това онлайн http://www.timezoneconverter.com/cgi-bin/zoneinfo

 

edit: поправка на некои грешки във стила.

#!/bin/bash                                                                                                                    

# само за bash                                                                                                                 
shopt -s expand_aliases

clear;

alias datetime="date +'%a-%d-%b,%H:%M'"
echo -e 'Колко е часът във Европа?'
echo -e '==========================='
echo -e 'Amsterdam:\t\t' "$(TZ="Europe/Amsterdam" datetime)"                                                                   
echo -e 'Madird:   \t\t' "$(TZ="Europe/Madrid" datetime)"
echo -e 'Berlin:   \t\t' "$(TZ="Europe/Berlin" datetime)"
echo -e 'Sofia:    \t\t' "$(TZ="Europe/Sofia" datetime)"
echo -e 'Moscow:   \t\t' "$(TZ="Europe/Moscow" datetime)"
echo -e 'Istanbul: \t\t' "$(TZ="Europe/Istanbul" datetime)"
echo -e 'London:   \t\t' "$(TZ="Europe/London" datetime)"
echo -e ''
echo -e 'Колко е часът във Америка?'
echo -e '==========================='
echo -e 'NYC:      \t\t' "$(TZ="America/New_York" datetime)"
echo -e 'Bogota:   \t\t' "$(TZ="America/Bogota" datetime)"
echo -e 'Mexico City:\t\t' "$(TZ="America/Mexico_City" datetime)"
echo -e ''
echo -e 'Колко е часът във Азия?'
echo -e '==========================='
echo -e 'Tokyo:    \t\t' "$(TZ="Asia/Tokyo" datetime)"
echo -e 'Bangkok:  \t\t' "$(TZ="Asia/Bangkok" datetime)"
echo -e 'HongKong: \t\t' "$(TZ="Asia/Shanghai" datetime)"

Редактирано от ivoarch (преглед на промените)

Wallpaper или тапет за sysadmin-овете а ла conky!

 

Прочетете скрипта за да узнаете повече за това което прави :P

Редактирайте по ваш вкус!

 

Ето как изглежда -> ЦЪК!

 

Usage:

Запазете като например: admin_wall.sh

Редактирайте внимателно скрипта, по ваши нужди.

Дайте права: chmod +x admin_wall.sh

Стартирайте: ./admin_wall.sh

Направете един крон който да стартира скрипта по желано от вас време: например всяка 1мин. така информацията на тапета ще се актуализира ;)

crontab -e

и сложете (там където user е вашето потребителско име)

*/1 * * * * /home/ivo/bin/admin_wall.sh

 

Ако след като изпълните скрипта не видите тапета на декстопа, значи някоя от най долните команди не както трябва, пробвайте да редактирате.

 

Source

#!/bin/bash

# Къде да бъде запазен тапета
IMAGE_PATH="$HOME/Pictures/Wallpapers/admin_wall.jpg"

# Размер на екрана, пример - 800x600 1024x768 1280x800 ...
SCREEN_SIZE="1024x768"

# Цвят за фона
OLIVE="#9FB04E"
BLUE="#4370AB"
DARK="#000000"

# Цвят за текста
BLACK="black"
WHITE="white"
GREEN="lime"

# Шрифт за текста
# Получи списък на всички шрифтове $ convert -list font
FONT="Courier-Bold"
FONT_SIZE="24"

# Къде точно да се показва текста
# Center|NorthWest|NorthEast|SouthWest|SouthEast|North|West|South|East
GRAVITY="NorthEast"

# Получаване на изхода от $uptime (user friendly)
uptime=$(</proc/uptime)
uptime=${uptime%%.*}

seconds=$(( uptime%60 ))
minutes=$(( uptime/60%60 ))
hours=$(( uptime/60/60%24 ))
days=$(( uptime/60/60/24 ))

# Създаване на тапета
convert -size "$SCREEN_SIZE" xc:"$BLUE" -font "$FONT" -pointsize "$FONT_SIZE" -fill "$WHITE" \
        -gravity "$GRAVITY" -draw "text 50,150 'Kernel: $(uname -r)'" \
        -gravity "$GRAVITY" -draw "text 50,175 'Hostname: $(uname -n)'" \
        -gravity "$GRAVITY" -draw "text 50,200 'Uptime: $(echo "$days days, $hours hours, $minutes minutes, $seconds seconds")'" \
        -gravity "$GRAVITY" -draw "text 50,225 'Date: $(date +'%a-%d-%b,%H:%M')'" "$IMAGE_PATH"

# Сложи като тапет на десктопа
# За Gnome2 също може би MATE
#gconftool-2 -t string -s /desktop/gnome/background/picture_filename "$IMAGE_PATH"
# За Gnome3 и Unity
gsettings set org.gnome.desktop.background picture-uri "$IMAGE_PATH"
# За тези които липсват
#display -size "$SCREEN_SIZE" -window root "$IMAGE_PATH"

Редактирано от ivoarch (преглед на промените)

  • 2 седмици по-късно...

Май само аз ще си драскам тука :D, кво пък!

 

Вдъхновен от този пост и не само, тъй като и преди си бях правил подобен скрипт, но този път го направих по глобален.

 

Инсталиране на която и да е, версия на Firefox със вашият езиков пакет.

 

Забележка! Бачка на всякаква архитектура 32/64 бит.а

 

Как работи?

 

1. Запазете като install_firefox-i18n.sh

2. Дайте права chmod a+x install_firefox-i18n.sh

3. Изпълнете sudo ./install_firefox-i18n.sh version locale

 

Забележка! заменете version със версията на FF която ще инсталираме, и  locale със езика който ще ползваме.

 

Пример за Български език: И инсталиране на Esr версията 31.2.0

 

sudo ./install_firefox-i18n.sh 31.2.0esr bg

 

Скрипта?

#!/bin/bash
# Install any version of Firefox browser with your language pack (on Linux) so fast.
# Autor: Ivaylo Kuzev (@ivoarch) 2014

# Init
if [ ! $# -eq 2 ]; then
    echo "usage: sudo $0 version locale"
    echo "example: sudo $0 31.2.0esr bg"
    exit 1;
fi

version="$1"
locale="$2"

# Find the architecture
osarch="$(uname -m)"

# Main
echo "Downloading Firefox-$version-i18n-$locale..."
cd /usr/local/src
wget -c "ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${version}/linux-${osarch}/${locale}/firefox-${version}.tar.bz2"
echo "Installing Firefox-$version-i18n-$locale..."
tar -xjvf firefox-"${version}".tar.bz2
rm -rf /opt/firefox 2>/dev/null
mv firefox /opt/firefox
rm /usr/bin/firefox 2>/dev/null
ln -sf /opt/firefox/firefox /usr/bin/firefox
mkdir -pv /usr/share/pixmaps
ln -sfv /opt/firefox/browser/icons/mozicon128.png \
        /usr/share/pixmaps/firefox.png
echo "Creating a .desktop file for Firefox browser"
mkdir -pv /usr/share/applications
rm /usr/share/applications/firefox.desktop 2>/dev/null
cat << 'EOF' > /usr/share/applications/firefox.desktop
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=Firefox Web Browser
Comment=Browse the World Wide Web
GenericName=Web Browser
Exec=/usr/bin/firefox %u
Terminal=false
Icon=firefox
Categories=GNOME;GTK;Network;WebBrowser;
Type=Application
MimeType=application/xhtml+xml;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true
EOF
echo "Cleaning up..."
rm -rf firefox-"${version}" firefox-"${version}".tar.bz2

exit 0

Краният резултат е инсталация за 17сек. на моята барака :D

 

17.69s user 4.11s system 27% cpu 1:18.54 total, running sudo ./install_firefox-i18n.sh 31.2.0esr bg

 

За това време има дистрибуции които не могат да си синхронизират хранилища-та само.

Редактирано от ivoarch (преглед на промените)

Скрипт за направа на хранилище за CentOS

 

Което ще изглежда така:

root@localhost ~]$ tree ~/Dropbox/Public/rpmrepo
/home/ivo/Dropbox/Public/rpmrepo
├── el6
│   ├── i386
│   ├── SRPMS
│   └── x86_64
└── el7
    ├── i386
    ├── SRPMS
    └── x86_64

8 directories, 0 files
  • el6 - За пакетите предназначени за Rhel/CentOS 6 релийз.
  • el7 - За пакетите предназначени за Rhel/CentOS 7 релийз.
  • i386 - Директорията в която ще слагаме пакети с архитектура 32-бита.
  • x86_64 - Директорията в която ще слагаме пакети с архитектура 64-бита.
  • SRPMS - Съдържа сорс пакетите създадени в процеса на изграждане.

 

Как работи?

 

1. Създайте структурата на хранилище-то.

 

mkdir -p ~/Dropbox/Public/rpmrepo/el{6,7}/{i386,x86_64,SRPMS}

 

2. Поставете вашите rpm пакети във директорията която желаете, съответно архитектурата им.

3. Изпълнете скрипта, за да се погрижи за останалото.

 

Скрипта:

#!/bin/bash
# Create RPM Repository for Rhel/CentOS 6/7

# инсталиране на зависимости
yum install createrepo repoview

# създаване на хранилището със цялата мета дата, която ще е нужна на yum за четенето му.
# заменете със вашият ftp сървер!
ftpdir="$HOME/Dropbox/Public/rpmrepo"
releases=(el6 el7)

for release in "${releases[@]}"; do
    for dir in i386 x86_64 SRPMS; do
        pushd "${ftpdir}/${release}/${dir}" >/dev/null 2>&1
        createrepo -v .
        repoview .
        popd >/dev/null 2>&1
    done
done

Краен резултат:

 

https://dl.dropboxusercontent.com/u/66222581/rpmrepo/el6/i386/repoview/index.html

Редактирано от ivoarch (преглед на промените)

  • 2 седмици по-късно...

BC

https://www.gnu.org/software/bc/manual/html_mono/bc.html

1.От Терминала можем да преобразуваме или представим  някакво  число  в някаква  бройна система,Било то в десетична бройна система ,двоична тн.

2.От Терминала можете да правите прости аритмични сметки :)

Нека да започнем с бройните системи

Просто пишете echo "obase = каква бройна система двоична,десетична ,осмична и тн ; тук числото ,което искаме да представим"

вертикална чертичка ,тръбичка и bc.

Обаче за Двоична бройна система в десетична пишем вместо obase - ibase.

Примерно искаме

Шестнадесетична бройна система

echo "obase=16; 10"     |bc

Двоична бройна система в десетична

echo "obase=2; 10"     |bc

Обаче  двоична 

echo "ibase=2; 11010101" | bc

2.Така сега  малко сметки  .Пак с bc


Разлагане на множители някакво число и така ще знаете дали е просто или не

Примерно :

113 дали просто

factor  113

Конзолата показва,че числото се дели само на себе си ,извежда самото число което сме въвели значи е просто,но 114 не е ,защото конзолата показва че се дели на  2, на 3 ,на  19 .

 114
2 3 19
Събиране

echo '57+43+5543' | bc

Изваждане

echo '57-43-200' | bc

Умножение

echo '57*43' | bc

Корен квадратен

 echo 'sqrt(4)' | bc

Обаче

 echo 'sqrt(5)' | bc

Пак е 2 ,защото сме написали да няма остатък .Да не показва остатък.Просто една буква -l -

 echo 'sqrt(5)' | bc -l

2.23606797749978969640

Ако не Ви трябва толкова дълъг остатък можете да пишете само до 5 scale=5;

 echo 'scale=5;sqrt(5)' | bc -l
Степенуване
echo '6^6' | bc

Скоби

echo '7+(6*5)' | bc

Може и без скобки

echo '7+6*5' | bc

Числото пи

echo "scale=50; 4*a(1)" | bc -l -q

Редактирано от MirchevSvilen (преглед на промените)

  • 2 седмици по-късно...

Една порция от вдъхновяващи цитата никога не са излишни!

 

Шел скрипт "Вдъхновяващи цитати за позитивен живот на десктопа" базиран на Wallpaper за администратора от същата страница .

 

ето как изглежда:

h_1417346842_2957594_87adf629c4.png

#!/bin/bash
# Вдъхновяващи цитати за позитивен живот на десктопа.

# Къде да бъде запазен тапета
IMAGE_PATH="$HOME/Pictures/Wallpapers/admin_wall.jpg"

# Размер на екрана, пример - 800x600 1024x768 1280x800 ...
SCREEN_SIZE="1024x768"

# Шрифт за текста
# Получи списък на всички шрифтове $ convert -list font
FONT="Palatino-Bold"
FONT_SIZE="24"

# Къде точно да се показва текста
# Center|NorthWest|NorthEast|SouthWest|SouthEast|North|West|South|East
GRAVITY="Center"

# Цвят за фона
tangoColors() {
echo '
#fce94f
#edd400
#c4a000
#fcaf3e
#f57900
#ce5c00
#e9b96e
#c17d11
#8f5902
#8ae234
#73d216
#4e9a06
#729fcf
#3465a4
#204a87
#ad7fa8
#75507b
#5c3566
#ef2929
#cc0000
#a40000
#eeeeec
#d3d7cf
#babdb6
'
}

motivationalWords() {
echo '
"Понякога добрите неща си отиват, за да дойдат по-добрите."
"Не цената е важна, а стойността."
"Не слушай какво говорят хората – гледай какво правят."
"Не можеш да промениш това, срещу което отказваш да се изправиш."
"Можеш да учиш от грешките си, само ако не ги отричаш."
"Ако не рискуваш нищо, рискуваш всичко."
"Хората са по-скоро това, което крият, отколкото това, което демонстрират."
"Качеството не е действие, то е навик."
"На всеки ден трябва да се гледа като на един малък живот."
"Без вътрешен мир, не е възможно да има световен мир."
"Количеството на любовта е равно на количеството на щастието."
"Смеха - и глухите го чуват и слепите го виждат…"
"Когато е достатъчно тъмно, можеш да видиш звездите."
"Най-добрият начин да излезеш от тунела е, като минеш през него."
"Ако искаш да те обичат, обичай!"
"За да получиш повече от живота, дай повече от себе си."
"Не съществува друго качество за надмощие освен добротата."
"Човек се дави не защото е скочил, а защото е останал под водата."
"Не ще успее, който все отлага."
"Огънят не угасва от това, че от него запалват друг."
"За да стигнеш до извора, трябва да плуваш срещу течението."
"Страховете ги запази за себе си, а куражът го сподели с другите."
"Щом пълзиш като червей, не се сърди, че са те настъпили."
"Когато не знаеш къде отиваш, винаги отиваш другаде..."
"Всичко е възможно за този, който вярва."
"Невъзможното за човеците за Бога е възможно."
"За да повярваш в доброто, трябва да започнеш да го правиш."
"Животът е най-прекрасното нещо, което е измислила природата."
"Най-превъзходната длъжност е да бъдеш човек на тази земя."
"Неуспехът не означава, че си се провалил, а че не си успял все още."
"Ако можеш да си орел, не се напъвай да си пръв сред гаргите."
"Щастието е като здравето: когато не го забелязваш, значи го има."
"В усмихнато лице сърдит юмрук не удря."
"Животът започва от другата страна на отчаянието."
"Във вътрешния свят на човека, добротата е слънцето."
"Човек струва толкова, на колкото сам се оцени."
"Великите дела винаги са съпроводени с големи препятствия."
"Зад облаците небето винаги е синьо."
"Да започнеш е лесно — да продължиш е трудно."
"Болката е нещо временно, но когато се предадеш е завинаги."
"Проблемите са всъщност възможности, облечени в работни дрехи."
"Водата дълбае камъка не със сила, а с постоянство."
"Няма по-силен победител от победителя, победил себе си."
'
}

# Показва случаен цвят
randomColor="$(sort -R <(tangoColors) | head -1)"
# Показва случаен цитат
randomWord="$(sort -R <(motivationalWords) | head -1)"

# Създаване на тапета
print_wall() {
    convert -size "$SCREEN_SIZE" xc:"$randomColor" -font "$FONT" -pointsize "$FONT_SIZE" -fill "#2e3436" \
            -gravity "$GRAVITY" -draw "text 0,0 '$randomWord'" "$IMAGE_PATH"
}

set_wall() {
# Сложи като тапет на десктопа
# За Gnome2 също може би MATE
gconftool-2 -t string -s /desktop/gnome/background/picture_filename "$IMAGE_PATH"
# За Gnome3 и Unity
#gsettings set org.gnome.desktop.background picture-uri "$IMAGE_PATH"
# За тези които липсват
#display -size "$SCREEN_SIZE" -window root "$IMAGE_PATH"
}

print_wall "$@"
set_wall "$@"

exit 0

Usage:

Запазете като например: motivational_wall.sh

Редактирайте внимателно скрипта, по ваши нужди.

Дайте права: chmod +x motivational_wall.sh

Стартирайте: ./motivational_wall.sh

Направете един крон който да стартира скрипта по желано от вас време: например всяка 1мин. така информацията на тапета ще се актуализира ;)

crontab -e

и сложете (там където user е вашето потребителско име)

*/1 * * * * /home/ivo/bin/motivational_wall.sh

http://rg3.github.io/youtube-dl/

youtube-dl е малка конзолна програмка базирана на python с която може да се сваля от множество сайтове за видео споделяне.

 

Синтакс:

youtube-dl Линк или ID (Само за YouTube) Опции (Незадължително)

 

Пълен списък с опциите

Поддържани сайтове

 

 

Някой настройвал ли е машина, която работи под Дебиан да пуска команда да се включат други машини по мрежата в даден час? Под други пс-та имам впредвид една linux и една на windows. Идеята е да се пускат и спират автоматично. Спирането примерно може да се направи с cron(предполагам).

Някой настройвал ли е машина, която работи под Дебиан да пуска команда да се включат други машини по мрежата в даден час? Под други пс-та имам впредвид една linux и една на windows. Идеята е да се пускат и спират автоматично. Спирането примерно може да се направи с cron(предполагам).

 

А по какъв начин смятате да ги пуснете другите машини?  WoL или някакво хардуерно решение? Или искате ние да ви предложим такова решение?

1. Настройвате PC-тата, които искате да се включват да премат WoL в BIOS-а им.

2. От PC-то което ще ги "управлява" пускате wakeonlan, etherwake, wether-wake или каквото си харесате следвано от MAC-а на PC-то което ще бъдите. Повтаряте същото за всяко следващо PC.

3. Варианти за да спрете PC-тата:

3.1. Следите кога будното PC си е свършило работатат и го гасите след това

3.2. Ползвате cron или windows scheduler на самото отдалечено PC за да off-нете.

3.3. За linux можете да ползвате ssh с ключове за да изпълните shutdown на отдалеченото PC. За windows има вариант да ползвате net rpc shutdown.

 

Ако се затруднявате с cron или shutdown, то кажете за да ви напишем примери. Успех!

Редактирано от mail123456 (преглед на промените)

Добре! С wakeonlan успявам да пусна компютъра с линукс. Въпроса е как да настроя wakeonlan-a автоматично да го прави това, а не ръчно. Примерно в 9:15 да пуска команда за старт. Cron също го оправих как да подава команда за shutdown.

Редактирано от jelew (преглед на промените)

  • 2 седмици по-късно...

yumls - zsh/bash спомагателна функция за преглед на ".rpm" пакети.

 

Начин на използване?

1. Запазете във ~/.zshrc за (ZSH) или ~/.bashrc за (BASH).

2. Рестартирайте шела.

3. Пример - yumls openssh

#
# ZSHELL function yumls
#

function yumls {
    printf '%s ' 'Would you like to see (b)inaries, (c)hangelogs, (d)ocs?'
    read CHOICE

    case $CHOICE in
        b)
            rpm -ql $1 | grep --color=auto 'bin'
            ;;
        c)
            rpm -q --changelog $1 | less
            ;;
        d)
            rpm -qd $1 | grep --color=auto 'doc'
            ;;
        *)
            echo 'Invalid option'
    esac
}

ACTION

[ivo@Centos ~]$ yumls openssh
Would you like to see (b)inaries, (c)hangelogs, (d)ocs? d
/usr/share/doc/openssh-5.3p1/CREDITS
/usr/share/doc/openssh-5.3p1/ChangeLog
/usr/share/doc/openssh-5.3p1/INSTALL
/usr/share/doc/openssh-5.3p1/LICENCE
/usr/share/doc/openssh-5.3p1/OVERVIEW
/usr/share/doc/openssh-5.3p1/PROTOCOL
/usr/share/doc/openssh-5.3p1/PROTOCOL.agent
/usr/share/doc/openssh-5.3p1/PROTOCOL.certkeys
/usr/share/doc/openssh-5.3p1/README
/usr/share/doc/openssh-5.3p1/README.dns
/usr/share/doc/openssh-5.3p1/README.nss
/usr/share/doc/openssh-5.3p1/README.platform
/usr/share/doc/openssh-5.3p1/README.privsep
/usr/share/doc/openssh-5.3p1/README.smartcard
/usr/share/doc/openssh-5.3p1/README.tun
/usr/share/doc/openssh-5.3p1/TODO
/usr/share/doc/openssh-5.3p1/WARNING.RNG

Редактирано от ivoarch (преглед на промените)

 

yumls - zsh/bash спомагателна функция за преглед на ".rpm" пакети.

 

....

Ще си разреша само една препоръка: когато се правят подобни разширения на програми е добре да се спазва стила на програмата. Задавай функцията, която ще изпълняваш като параметър в командната линия. Ползването на менюта много по-рядко е удобно :)

Ще си разреша само една препоръка: когато се правят подобни разширения на програми е добре да се спазва стила на програмата. Задавай функцията, която ще изпълняваш като параметър в командната линия. Ползването на менюта много по-рядко е удобно :)

Да това ми ясно и наистина сте прав, първо така бях направил функцията, но пък после реших да пробвам нещо по различно с вид на меню. Наистина по другият начин, ако знаете действието което искате да извършите е, доста по удобно, отколкото тепърва да зяпате в монитора коя опция да изберете.

 

Например yumls -d за doc, yumls -b за binaries, yumls -c за changelogs

 

Отивам да пия кафенце, че сега ставам и после ще го сменя :D

Да това ми ясно и наистина сте прав, първо така бях направил функцията, но пък после реших да пробвам нещо по различно с вид на меню. Наистина по другият начин, ако знаете действието което искате да извършите е, доста по удобно, отколкото тепърва да зяпате в монитора коя опция да изберете.

 

Например yumls -d за doc, yumls -b за binaries, yumls -c за changelogs

 

Отивам да пия кафенце, че сега ставам и после ще го сменя :D

Неее, аз не казвам да го смениш. Само да прецениш кое е по-удобно. И още една дребна препоръка: печатай някакъв хелп ако опциите са сгрешени или има недостатъчно данни (примерно не е дадено името на пакета). И е добре да обработваш кода, върнат от rpm за да печаташ смислено съобщение ако пакета липсва или командата се изпълнява с по-ниски от необходимите привилегии :)

Ок, този път май се получи нещо по добро :)

Така, сега нещата се извършват чрез опциите -b, -c, -d , тъй като наистина така е доста по удобно от меню варианта, пък и както ме посъветвах те, така ще запазим и стила на програмата. 

Също още едно предимство е, че вече може да работи и при пакети, които не са инсталирани във системата.

Добавено е помощен текст, относно превилегиите скрипта няма нужда от такива.

 

Ако имате забележки, ще се радвам да ги чуя, също някакви идеи?

 

Ето скрипта - Да този път реших да е скрипт, а не функция.

За да узнаете как работи прочетете скрипта :P или чакайте той да ви подскаже :D

 

edit- 2 Благодаря капитане!

edit- 3 Също реших да го прекръста на rpmls мисля, че има повече логика, тъй като използваме rpm а не yum.

#!/usr/bin/env bash

OPT="$1"
PACKAGE="$2"

usage() {
    echo ""
    echo "$0 - list RPM package contents"
    echo ""
    echo "Usage: $0 [-OPTION] [PACKAGE-NAME]"
    echo "Options:"
    echo "  -b : Show binaries of a package."
    echo "  -c : View the Changelog of a package."
    echo "  -d : Show documentation contained in that package."
    echo ""
    echo "Example 1: $0 -d openssh"
    echo "Example 2: $0 -d /path/to/openssh.rpm"
    echo ""
    exit 1
}

show_binaries() {
    # check to see if an rpm is installed
    if rpm -q --quiet "${PACKAGE}"; then
        # the package is installed
        rpm -ql "${PACKAGE}" | grep --color=auto 'bin';
    else
        # the package is not installed
        rpm -qlp "${PACKAGE}" | grep --color=auto 'bin';
    fi
}

show_changelog() {
    # check to see if an rpm is installed
    if rpm -q --quiet "${PACKAGE}"; then
        # the package is installed
        rpm -q --changelog "${PACKAGE}" | less;
    else
        # the package is not installed
        rpm -qp --changelog "${PACKAGE}" | less;
    fi
}

show_doc() {
    # check to see if an rpm is installed
    if rpm -q --quiet "${PACKAGE}"; then
        # the package is installed
        rpm -qd "${PACKAGE}" | grep --color=auto 'doc';
    else
        # the package is not installed
        rpm -qdf "${PACKAGE}" | grep --color=auto 'doc';
    fi
}

if [ $# -eq 0 ]; then
    echo 'Invalid argument!';
    usage;
fi

# get options
while [ $# -gt 1 ]; do
    case "$OPT" in
        -b)
            show_binaries;
            ;;
        -c)
            show_changelog;
            ;;
        -d)
            show_doc;
            ;;
        *)
            echo "That option is not recognized!"
            usage;
            ;;
    esac
    shift
done

Редактирано от ivoarch (преглед на промените)

Няколко забележки:

1. в case проверявай за всичко останало, не само за тези, започващи с тире

2. вместо такава конструкция:

if rpm -q --quiet "${PACKAGE}"; then

ползвай по-добре

rpm -q --quiet "${PACKAGE}"
if [ $? -eq 0 ] ....

3. Остави на потребителя грижата за пейджинг, защото в скрипт можеш да получиш (понякога) доста странни и непредсказуеми резултати

 

4. Това: 

shift 2;;

според мен е излишно, няма смисъл да задаваш на една линия няколко двойки действие/пакет

5. Не проверяваш дали файла съществува и е читаем

Няколко забележки:

1. в case проверявай за всичко останало, не само за тези, започващи с тире

2. вместо такава конструкция:

if rpm -q --quiet "${PACKAGE}"; then

ползвай по-добре

rpm -q --quiet "${PACKAGE}"
if [ $? -eq 0 ] ....

3. Остави на потребителя грижата за пейджинг, защото в скрипт можеш да получиш (понякога) доста странни и непредсказуеми резултати

 

4. Това: 

shift 2;;

според мен е излишно, няма смисъл да задаваш на една линия няколко двойки действие/пакет

5. Не проверяваш дали файла съществува и е читаем

1. ok, просто мислих че няма нужда, тъй като имам if [ $# -eq 0 ]

2. реших пак да ползвам rpm за това. Каква ще е разликата ако това се извършва от rpm? забелязох за опциия на rpm

--quiet    -- print as little as possible

4.. За shift може би сте прав, не знам.

5. То rpm връща грешка ако файла го няма - ако това имате предвид?

error: file /home/ivo/openssh.rpm: No such file or directory

1. ok, просто мислих че няма нужда, тъй като имам if [ $# -eq 0 ]

2. реших пак да ползвам rpm за това. Каква ще е разликата ако това се извършва от rpm? забелязох за опциия на rpm

--quiet    -- print as little as possible

4.. За shift може би сте прав, не знам.

5. То rpm връща грешка ако файла го няма - ако това имате предвид?

error: file /home/ivo/openssh.rpm: No such file or directory

1. това с нула аргументи е едно, съвсем друго е ако аргументите са неправилни. Какво ще стане ако сложа първи аргумент само една буква?

2. Смята се че не е добър стил. Освен това, кодовете, които се връщат обикновено са повече от един

4. Аз лично смятам подобна възможност за излишна :)

5. Ама някой трябва по някакъв начин да обработи това изключение (виж точка 2)

1. това с нула аргументи е едно, съвсем друго е ако аргументите са неправилни. Какво ще стане ако сложа първи аргумент само една буква?

2. Смята се че не е добър стил. Освен това, кодовете, които се връщат обикновено са повече от един

4. Аз лично смятам подобна възможност за излишна :)

5. Ама някой трябва по някакъв начин да обработи това изключение (виж точка 2)

1. Е, да има разлика, в крайна сметка реших да ги добавя всички.

2. Може, ще по мисля още малко, пък ще видя.

4. Премахнато

5. Тук не ви разбирам нещо капитане.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    26%
    Дарени 256.00 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.