Премини към съдържанието
  • Добре дошли!

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

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

     

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


tux

Препоръчан отговор

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

Линк

Линк към коментара
Сподели в други сайтове

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

Потребители с най-много отговори

Едно конзолно решение, което ми дойде като идея, преди неколко дни след като започнах да слушам нердовете 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

 

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

[email protected] ~]$ 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 "[email protected]"
set_wall "[email protected]"

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

[[email protected] ~]$ 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. Тук не ви разбирам нещо капитане.

Линк към коментара
Сподели в други сайтове

Добавете отговор

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

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване