Vra

    

Hierdie vraag het reeds 'n antwoord hier:

    
            
  •              Maak 'n bash alias dat 'n parameter? neem                                      13 antwoorde                          
  •     
    

Is dit moontlik om die volgende te doen:

Ek wil die volgende uit te voer:

mongodb bin/mongod

In my bash_profile Ek het

alias = "./path/to/mongodb/$1"
Was dit nuttig?

Oplossing

'n alias sal uitbrei na die string wat dit verteenwoordig. Enigiets na die alias verskyn nadat sy uitbreiding sonder om te wees of kan geslaag word as eksplisiete argumente (bv $1).

$ alias foo='/path/to/bar'
$ foo some args

sal kry uitgebrei na

$ /path/to/bar some args

As jy wil eksplisiete argumente gebruik, sal jy nodig het om 'n funksie

gebruik
$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123

sal uitgevoer word asof jy gedoen het

$ /path/to/bar abc 123 fixed args

Om 'n alias undefine:

unalias foo

Om 'n funksie undefine:

unset -f foo

Om die tipe en definisie (vir elke gedefinieer alias, navraag, funksie, ingeboude of uitvoerbare lêer) sien:

type -a foo

Of tik net (vir die hoogste voorrang voorkoms):

type -t foo

Ander wenke

Gewoonlik wanneer ek wil argumente slaag om 'n alias in Bash, ek gebruik 'n kombinasie van 'n alias en 'n funksie soos hierdie, byvoorbeeld:

function __t2d {                                                                
         if [ "$1x" != 'x' ]; then                                              
            date -d "@$1"                                                       
         fi                                                                     
} 

alias t2d='__t2d'                                                               

om parameters te gebruik in aliasse, ek gebruik hierdie metode:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

Dit is 'n self-vernietigende funksie toegedraai in 'n alias, sodat dit pretty much is die beste van beide wêrelde, en nie die geval neem 'n ekstra lyn (s) in jou definisies ... wat ek haat, o ja en as jy behoefte wat terugkeer waarde, sal jy het om dit te stoor voordat hy ontstel, en dan terug te keer die waarde met behulp van die "terugkeer" navraag in wat self vernietigende funksie daar:

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'

so ..

Jy kan, as jy nodig het om dit veranderlike het in daar

alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'

natuurlik ...

alias mongodb='./path/to/mongodb/'

sou eintlik dieselfde ding doen sonder die behoefte aan parameters, maar soos ek sê, as jy wou of moes hulle vir een of ander rede (byvoorbeeld, wat jy nodig het $ 2 in plaas van $ 1), sou jy nodig het om 'n wrapper soos wat gebruik . As dit is groter as 'n reël wat jy kan oorweeg net die skryf van 'n funksie volslae aangesien dit sou meer van 'n gedrog as dit groter geword. Funksies is groot, aangesien jy al die voordele wat funksies gee kry (sien voltooiing, strikke, bind, ens vir die goodies wat funksies kan voorsien, in die bash manpage).

Ek hoop dit help jou uit:)

Dit is die oplossing wat kan verhoed dat die gebruik van funksie:

alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'

toetsuitslag

addone 200
input: 200
result:201

csh (in teenstelling met bash ) kan jy presies wat jy wil doen.

alias print 'lpr \!^ -Pps5'
print memo.txt

Die notasie \!^ veroorsaak dat die argument in die opdrag te plaas op hierdie punt.

Die ! karakter is voorafgegaan deur 'n \ om te verhoed dat dit as dit vertaal word as 'n geskiedenis opdrag.

Jy kan ook slaag verskeie argumente:

alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps

(Voorbeelde uit http://unixhelp.ed.ac.uk/ dop / alias_csh2.1.html .)

Om antwoord leed25d se vereenvoudig, gebruik 'n kombinasie van 'n alias en 'n funksie. Byvoorbeeld:

function __GetIt {
    cp ./path/to/stuff/$* .
}

alias GetIt='__GetIt'
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top