Автор Тема: Псевдоними в изпълним низ?  (Прочетена 1104 пъти)

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8802
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Преди малко ми се случи нещо странно. Не мога да поставям псевдоним в най-обикновен bash script. Предполагам, че, ако го заредя от друг документ със source може и да стане. И да, не е фатално, че не работи, просто ще си изпиша цялата команда. И все пак ми стана интересно това, защо е така. Някой да има някаква идея?


п.п. На shell scripting съм на ниво детската ясла и много неща не са ми ясни;

п.п.п. За да не съм голословен, нека си създадем примерче:

Код
GeSHi (Bash):
  1. #! /bin/bash
  2. alias lh="ls -lrth"
  3. lh
  4.  
« Последна редакция: Nov 17, 2015, 11:31 от go_fire »
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: Псевдоними в изпълним низ?
« Отговор #1 -: Nov 17, 2015, 12:17 »
Първо, когато изпълняваш скрипт, за него се създава нов неинтерактивен шел, а по подразбиране alias-ите не играят в неинтерактивни шелове. За да им позволиш да играят, добави си следния ред в началото на скрипта (след указателя за шела):
Код:
shopt -s expand_aliases
След което под него можеш или ръчно да си задаваш твои alias-и, или да си вмъкнеш файл с alias-и (като ~/.bashrc) със source.

Второ, имай предвид, че alias командите влизат в сила след задаване на exit кода им, т.е., след пълното им изпълнение, което значи, че не трябва да слагаш други команди на същия ред, отделени от alias командата с ";" или "&&", които разчитат alias-ът да действа при тяхното изпълнение. В твоя пример си ги вписал добре, но не би имал успех ако напишеш някое от тези:
Код:
alias lh="ls -lrth"; lh
alias lh="ls -lrth" && lh

Трето, не виждам каква ти е ползата да си играеш с ръчно въведени alias-и в скрипт, вместо да си ги задаваш с променливи. Например:
Код
GeSHi (Bash):
  1. #!/bin/bash
  2. lh="ls -lrth"
  3. $lh
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8802
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Псевдоними в изпълним низ?
« Отговор #2 -: Nov 17, 2015, 13:38 »
Направо ме разби. Остави ме безмълвен. Отивам  да си тегля куршума, колко съм прост ☹
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

getqwerty11

  • Напреднали
  • *****
  • Публикации: 20
    • Профил
Re: Псевдоними в изпълним низ?
« Отговор #3 -: Nov 17, 2015, 14:15 »
Направо ме разби. Остави ме безмълвен. Отивам  да си тегля куршума, колко съм прост ☹

Бре, по-полека де, някой ще се подхлъзне. Много си интересен.
Активен