可以在bash中定义命令吗?


25

例如,我可以设置:

gb = cd /media/Dan/evolution

...以便每次我gb在bash中执行时,都可以cd访问该特定目录?

我在网上找到了一些东西:alias命令。但似乎无法完成以上工作。

有可能做到吗?怎么样?


10
alias gb='cd /media/Dan/evolution'
Nykakin 2014年

4
@Zen,如果可以解决问题,请接受答案。这是对帮助您解决此问题的用户表示感谢的手势:)
Ramesh 2014年

2
注意:这是关于bash的:Linux是内核。Linux通常被错误地用来指代整个操作系统。这可能导致混乱。例如,问题“我可以在Linux下做这样的事情吗?”是,如果您可以在某些计算机上进行操作,那么可以。因为您可以使用Linux内核来实现您喜欢的任何操作系统。因此,我们需要知道您使用的是Ubuntu Gnu + Linux +大概是X11(如果是在台式机上,即不是没有显示器的服务器)。
ctrl-alt-delor 2014年

@richard好点,尽管从技术上讲这是posix投诉,所以不仅如此bash

1
@richard确实,这就是问题所在。它之所以有用,是因为人们或多或少都没有使用Android之类的功能。我并不是说这是一件好事,而是它的本质。因为我在评论您的linux语句,所以我的推荐是隐式的。我只是说清楚自己,因为这是一个令人困惑的术语。(我可能会误解了您的最后评论)
抠图

Answers:


50

只需输入:

alias gb='cd /media/Dan/evolution'

要使此设置永久生效(以便在重新启动或打开另一个控制台后仍然生效),请将此行添加到文件〜/ .bashrc中(假设您使用bash作为默认外壳程序)


为了使它更加美观,您可以为别名创建一个专用的别名文件,例如〜/ .bash_aliases,然后从〜/ .bashrc文件中进行调用,如下所示:[-e〜/ .bash_aliases] &&。〜/ .bash_aliases这样,您就不会与其他东西一起“污染”〜/ .bashrc文件。
GeertVc 2014年

39

替代别名

gb() { cd /media/Dan/evolution; }

它定义了不带任何参数的外壳函数gb,并执行cd / media / Dan / evolution。与其他建议一样,可以将其添加到〜/ .bashrc中。


由于alias命令显示了已定义的别名的缺点,afaik定义这样的功能会导致“意外行为”。为了完善,我将投票给您:)
vfbsilva 2014年

7
并不是的。您可以键入:声明-f gb以查看其作用
Paul Calabro 2014年

11
另外,此选项更加灵活,因为它允许您在函数定义中添加自定义逻辑以接受参数并执行所需的任何操作。别名仅允许传递参数和执行预定义的操作
Paul Calabro 2014年

5
@PaulCalabro更好的是,type gb如果它是别名函数,则可以使用。
Sparhawk

POSIXLY:{ echo 'true() { : ; }' >./script ; . ./script ; command -V true ; command -V /usr/bin/true ; }- true is a shell function\n/usr/bin/true is /usr/bin/true-的\n人物都是在输出文本换行。
mikeserv

11

这是可能的,并且alias是您要查找的命令。例如,alias ll="ls -l"在bash中,您可以输入ll而不是ls -l。请注意,设置别名时不使用空格。man alias也可以是有用的。


-3

或者,可以编写一个调用所需命令的C程序并将其保存到/ usr / bin。

#include <stdio.h>
#include <string.h>

int main () {
    char command[50]; //notice you can change this to fit your needs
    int return_val;

    strcpy( command, "echo \"cd /media/Dan/evolution\" | bash -i" );
    return_val = system(command); 

   //this is equivalent to entering the command in a new bash, 
   //which will return and exit

    return return_val;
}

要编译它,请转到保存源的目录(以bash格式)并执行(您可能需要sudo):

 gcc ./gb.c -o /usr/bin/gb

这里进一步研究之后,我意识到简单地将您的命令投入system()到内置命令的bash中是行不通的。这就是为什么您需要创建交互式bash的实例并向其回显命令的原因。除非您想缩短对shell脚本的调用(some_script而不是sh ~/radgeRayden/Scripts/some_script),否则它过于复杂且可能无用。

system()函数的参考


2
您真的尝试过吗?没用
丹尼斯2014年

1
出于同样的原因,sh -c "cd /media/Dan/evolution"它不起作用。提示:subshel​​l
Digital Trauma 2014年

5
cd撇开/ subshel​​l问题,当您可以轻松地(或更容易地)将该命令放在shell脚本中时,将shell命令包装到c程序中有什么优势?
Digital Trauma 2014年

1
不是这方面的专家,但是不应该在/ usr / local / bin中放置类似这样的东西(希望是更有用的东西)吗?
2014年

2
即使此方法可以工作,也不应将它放入/ usr / local / bin中,因为它是特定于一个用户的。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.