bash aliases met command line arguments

Pagina: 1
Acties:

  • Punkie
  • Registratie: Oktober 2005
  • Laatst online: 06-12-2025
In zover ik het goed begrepen heb, is bash niet in staat the cmd line arguments op te vangen en in een alias op te roepen. Bijgevolg moet men een beroep doen op shell functions.

Het probleem:
Het plakken van het '&' symbool achter een command. In dit geval wil ik nedit starten met het simpele commando
code:
1
nedit fileA fileB


De alias zou dit moeten vervangen door
code:
1
nedit fileA fileB &


In de csh is dit gelijkaardig aan
code:
1
alias nedit="nedit \!* &"



Maar in bash??
we proberen
alias nedit="nedit $@ &"
code:
1
2
3
4
5
6
$ alias
alias nedit='nedit  &'
$ nedit .bashrc
[1] 4106
bash: .bashrc: command not found
$


Een poging met shell functions opent nedit maar geeft de argumenten niet door.
code:
1
2
3
4
5
6
7
8
9
function nedit 
{
    nedit $* &
}

# nedit
[5] 28157
[4]   Done                    nedit $*
#


Weet iemand hoe het wel moet?

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 13:45

deadinspace

The what goes where now?

Punkie schreef op zaterdag 25 augustus 2007 @ 10:48:
Een poging met shell functions opent nedit maar geeft de argumenten niet door.
code:
1
2
3
4
5
6
7
8
9
function nedit 
{
    nedit $* &
}

# nedit
[5] 28157
[4]   Done                    nedit $*
#
Het geeft de argumenten wel door, dat is het probleem niet. Het probleem is dat functions prioriteit hebben boven programma's, dus je nedit aanroep in je functie roept niet nedit het programma aan, maar het roept recursief je nedit functie aan. (Het is goed mogelijk dat je daardoor een paar mooie oneindige bash loopjes in de achtergrond hebt draaien trouwens)

Het is simpel op te lossen door het volledige pad naar nedit te gebruiken in je aanroep:
function nedit { /usr/bin/nedit $* & }

(of waar jouw nedit dan ook staat)

  • Punkie
  • Registratie: Oktober 2005
  • Laatst online: 06-12-2025
Met veel dank :)