当前位置:  开发笔记 > 编程语言 > 正文

如何将bash别名定义为多个命令的序列?

如何解决《如何将bash别名定义为多个命令的序列?》经验,为你挑选了5个好方法。

我知道如何在bash中配置别名,但有没有办法为一系列命令配置别名?

即我想要一个命令更改为特定目录,然后运行另一个命令.

另外,有没有办法设置运行"sudo mycommand"的命令,然后输入密码?在MS-DOS时代,我一直在寻找一个.bat文件但是我不确定linux(或者说在这种情况下是Mac OSX)的等价物.



1> Larry Shatze..:

要链接一系列命令,请尝试以下方法:

alias x='command1;command2;command3;'

或者你可以这样做:

alias x='command1 && command2 && command3'

如果前一个返回成功,&&使它只执行后续命令.

此外,为了以交互方式输入密码,或与其他类似的程序连接,请查看expect.(http://expect.nist.gov/)


@Frustrated:不.两个都是连续执行的.只有第一个不关心先前的命令是否失败.并行执行将是:`command1&command2&command3`

2> slebetman..:

你提到BAT文件所以你想要的就是写一个shell脚本.如果是这样,那么只需将您想要的命令逐行输入到文件中,如下所示:

command1
command2

并要求bash执行该文件:

bash myscript.sh

如果您希望能够直接调用脚本而不键入"bash",则将以下行添加为文件的第一行:

#! /bin/bash
command1
command2

然后将文件标记为可执行文件:

chmod 755 myscript.sh

现在您可以像任何其他可执行文件一样运行它:

./myscript.sh

请注意,unix并不真正关心文件扩展名.如果您愿意,可以简单地将文件命名为"myscript"而不使用".sh"扩展名.这是特别重要的第一线.例如,如果您想用Perl编程语言而不是bash编写脚本,那么第一行将是:

#! /usr/bin/perl

第一行告诉shell你要调用哪些解释器来执行你的脚本.

此外,如果您现在将脚本复制到$ PATH环境变量中列出的某个目录中,则只需键入其文件名即可从任何位置调用它:

myscript.sh

标签完成工作.这就是为什么我通常在$ PATH中包含一个〜/ bin目录,以便我可以轻松安装个人脚本.最重要的是,一旦你拥有了许多个人脚本,你可以通过复制你的个人〜/ bin目录轻松地将它们移植到任何新的unix机器上.


信不信由你,你输入的shell不仅仅是一个"命令提示符",而是一个完整的,图灵完备的编程语言(尽管语法很糟糕).所以shell脚本是用shell语言编写的.unixland中有几个shell:sh(经典的bourne shell),bash(从sh演变的bourne-again shell),csh(经典的c shell),tcsh(从csh演化而来),ksh(korn shell)..还有其他几个,但这些是最常见的.在Linux上,这些天大多数用bash编写shell脚本.
如果你不想在文件中乱扔垃圾,你也可以使用shell函数`myfunc(){command1 && command2}`.
但是,与使用函数乱丢.bashrc文件相比,"乱丢文件的地方"不那么混乱.想模块化:-)

3> wich..:

为别类定义这些类型的函数可能更容易,如果你想做的不仅仅是一两个命令,那么事情就更容易理解:

在.bashrc中

perform_my_command() {
    pushd /some_dir
    my_command "$@"
    popd
}

然后在命令行上你可以简单地做:

perform_my_command my_parameter my_other_parameter "my quoted parameter"

您可以在函数中执行任何您喜欢的操作,调用其他函数等.

您可能需要查看Advanced Bash Scripting Guide以获得深入的知识.



4> gregseth..:

对于别名,您可以使用此:

alias sequence='command1 -args; command2 -args;'

或者,如果第二个命令必须仅在第一个命令成功使用时执行:

alias sequence='command1 -args && command2 -args'



5> Diego Torres..:

如果逻辑变得更复杂或者你需要添加参数(尽管bash支持别名参数),你最好的选择可能是shell函数而不是别名.

可以在.profile或.bashrc中定义此函数.子shell是为了避免更改工作目录.

function myfunc {
   ( cd /tmp; command )
}

然后从命令提示符

$ myfunc

对于第二个问题,您可以将命令添加到/ etc/sudoers(如果您完全确定自己在做什么)

myuser           ALL = NOPASSWD: \
                    /bin/mycommand 

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有