Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中将参数传递给别名_Bash_Shell_.bash Profile - Fatal编程技术网

在bash中将参数传递给别名

在bash中将参数传递给别名,bash,shell,.bash-profile,Bash,Shell,.bash Profile,是否可以执行以下操作: mongodb bin/mongod 我想运行以下程序: mongodb bin/mongod 在我的bash_简介中 alias = "./path/to/mongodb/$1" 通常,当我想在Bash中将参数传递给别名时,我会使用别名和函数的组合,例如: function __t2d { if [ "$1x" != '

是否可以执行以下操作:

mongodb bin/mongod
我想运行以下程序:

mongodb bin/mongod
在我的bash_简介中

alias = "./path/to/mongodb/$1"

通常,当我想在Bash中将参数传递给别名时,我会使用别名和函数的组合,例如:

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

alias t2d='__t2d'                                                               

别名将扩展为它所表示的字符串。别名后面的任何内容都将在扩展后显示,而不需要或能够作为显式参数传递(例如,
$1

将扩展到

$ /path/to/bar some args
如果要使用显式参数,则需要使用函数

$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123
将被执行,就好像你做了一样

$ /path/to/bar abc 123 fixed args
要取消定义别名,请执行以下操作:

unalias foo
要取消定义函数,请执行以下操作:

unset -f foo
alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'
要查看类型和定义(针对每个定义的别名、关键字、函数、内置文件或可执行文件):

或仅键入(对于优先级最高的事件):


要简化leed25d的答案,请结合使用别名和函数。例如:

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

alias GetIt='__GetIt'

要在别名中使用参数,我使用以下方法:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'
它是一个用别名包装的自毁函数,因此它几乎是两个世界中最好的,并且在您的定义中不会占用额外的行。。。我讨厌它,哦,是的,如果你需要返回值,你必须在调用unset之前存储它,然后在自毁函数中使用“return”关键字返回值:

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

你可以,如果你需要那个变量的话

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

alias mongodb='./path/to/mongodb/'
实际上,如果您需要或出于某种原因需要它们(例如,您需要$2而不是$1),则需要使用这样的包装器。如果它比一条线大,你可以考虑只写一个函数,因为它会变得越来越大。函数非常棒,因为您可以获得函数提供的所有额外功能(请参阅bash手册中的completion、traps、bind等,了解函数可以提供的好处)

我希望这能帮助你:)在csh(与bash相反)中,你可以做你想做的事

alias print 'lpr \!^ -Pps5'
print memo.txt
符号
\^导致此时在命令中插入参数

字符前面有一个
\
,以防止它被解释为历史命令

您还可以传递多个参数:

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

(示例取自。)

这是可以避免使用函数的解决方案:

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

[-n“$1”]
(以这种方式使用“x”是过时的,对于任何现代shell都是不必要的)好吧,你可以叫我老派。最初的问题涉及别名和它们的参数。我相信你的话与对话没有任何关系。虽然不使用x,但这是一个很好的信息,因为它会让新手感到困惑,傲慢的程序员似乎出于某种原因喜欢这样做。我们应该在这方面提供帮助,不管什么东西是老派的,都不能真正原谅它带来的混乱。好消息是告诉新手不要这样做,因为这完全没有意义。他们想要的只是一个函数。制作一个函数,然后将其别名为另一个名称,这真的是毫无意义的。@leed25d愚蠢的问题:如果你把
\uu t2d
写成一个函数,那你为什么还要别名呢?为什么不命名函数
t2d
并跳过别名?~$alias myalias='function\uu myalias(){echo“Hello$*”;unset-f\uu myalias;}\uuu myalias'~$myalias-bash:意外标记“\uu myalias”附近的语法错误这太可怕了!你每次都在重新定义函数?(我甚至懒得检查你是否有语法错误)。这并不是说他们必须这样做,这应该是一个例子,是的,它每次都被重新定义,保持在一行,否则,它不会是一次性的,不是吗?这就像抱怨“alias”每次都会扩展到指定的内容,这有什么不同?JeeBee:行编辑把我的行连接在一起,所以我把它们放在一起;在这里要更正它,只想添加my.bashrc mkcd(){mkdir“$@”和&cd“$@”}中的示例,我在其中创建dir和cd,您也应该将“abc”涂成红色,因为$@=传递给函数的参数列表。@10basetom:如果您是指我答案中的颜色,这是由语法高亮自动完成的。在添加函数foo(){…}之后,如何删除它?@shinobi:
unset-f foo
它对我来说非常有效。我想在别名中将颜色编号(从31到37)传递给PS命令。我这样做:别名psany='{PS1=“\e[0;$(cat-)m>\e[m”}这应该更高!在我的用例中,使用函数是不可行的,因为我希望
return
在脚本没有源代码的情况下失败。将别名包装在函数中意味着
return
始终能成功执行。感谢您提供的解决方案。如果您提供钱包,我将在BCH中给您小费。
addone 200
input: 200
result:201