Lar*_*zer 69
要链接一系列命令,请尝试以下方法:
alias x='command1;command2;command3;'
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做:
alias x='command1 && command2 && command3'
Run Code Online (Sandbox Code Playgroud)
如果前一个返回成功,&&使它只执行后续命令.
此外,为了以交互方式输入密码,或与其他类似的程序连接,请查看expect.(http://expect.nist.gov/)
sle*_*man 16
你提到BAT文件所以你想要的就是写一个shell脚本.如果是这样,那么只需将您想要的命令逐行输入到文件中,如下所示:
command1
command2
Run Code Online (Sandbox Code Playgroud)
并要求bash执行该文件:
bash myscript.sh
Run Code Online (Sandbox Code Playgroud)
如果您希望能够直接调用脚本而不键入"bash",则将以下行添加为文件的第一行:
#! /bin/bash
command1
command2
Run Code Online (Sandbox Code Playgroud)
然后将文件标记为可执行文件:
chmod 755 myscript.sh
Run Code Online (Sandbox Code Playgroud)
现在您可以像任何其他可执行文件一样运行它:
./myscript.sh
Run Code Online (Sandbox Code Playgroud)
请注意,unix并不真正关心文件扩展名.如果您愿意,可以简单地将文件命名为"myscript"而不使用".sh"扩展名.这是特别重要的第一线.例如,如果您想用Perl编程语言而不是bash编写脚本,那么第一行将是:
#! /usr/bin/perl
Run Code Online (Sandbox Code Playgroud)
第一行告诉shell你要调用哪些解释器来执行你的脚本.
此外,如果您现在将脚本复制到$ PATH环境变量中列出的某个目录中,则只需键入其文件名即可从任何位置调用它:
myscript.sh
Run Code Online (Sandbox Code Playgroud)
标签完成工作.这就是为什么我通常在$ PATH中包含一个〜/ bin目录,以便我可以轻松安装个人脚本.最重要的是,一旦你拥有了许多个人脚本,你可以通过复制你的个人〜/ bin目录轻松地将它们移植到任何新的unix机器上.
为别类定义这些类型的函数可能更容易,如果你想做的不仅仅是一两个命令,那么事情就更容易理解:
在.bashrc中
perform_my_command() {
pushd /some_dir
my_command "$@"
popd
}
Run Code Online (Sandbox Code Playgroud)
然后在命令行上你可以简单地做:
perform_my_command my_parameter my_other_parameter "my quoted parameter"
Run Code Online (Sandbox Code Playgroud)
您可以在函数中执行任何您喜欢的操作,调用其他函数等.
您可能需要查看Advanced Bash Scripting Guide以获得深入的知识.
对于别名,您可以使用此:
alias sequence='command1 -args; command2 -args;'
Run Code Online (Sandbox Code Playgroud)
或者,如果第二个命令必须仅在第一个命令成功使用时执行:
alias sequence='command1 -args && command2 -args'
Run Code Online (Sandbox Code Playgroud)
如果逻辑变得更复杂或者你需要添加参数(尽管bash支持别名参数),你最好的选择可能是shell函数而不是别名.
可以在.profile或.bashrc中定义此函数.子shell是为了避免更改工作目录.
function myfunc {
( cd /tmp; command )
}
Run Code Online (Sandbox Code Playgroud)
然后从命令提示符
$ myfunc
Run Code Online (Sandbox Code Playgroud)
对于第二个问题,您可以将命令添加到/ etc/sudoers(如果您完全确定自己在做什么)
myuser ALL = NOPASSWD: \
/bin/mycommand
Run Code Online (Sandbox Code Playgroud)
Apropos 多个命令在一个别名中,您可以使用其中一个逻辑运算符来组合它们。这是一个切换到目录并对其执行 ls 的方法
alias x="cd /tmp && ls -al"
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用 shell 函数。这些是 sh/zsh/bash 命令。我对其他外壳的了解不够,无法确定它们是否有效。
至于 sudo 的事情,如果你想要(虽然我认为这不是一个好主意),正确的方法是改变/etc/sudoers文件以获得你想要的。