如何使用bash别名作为命令行参数

时间:2016-03-27 04:28:16

标签: linux bash shell ssh alias

我在google上看了这个,但之前似乎没有人问过这个问题。有没有办法设置别名并将其用作程序的命令行参数?

例如

ssh myserver

myserver被定义为我服务器的IP地址

3 个答案:

答案 0 :(得分:4)

通常,不,你的shell不会为你替换命令行参数。

特定的示例中,您实际上有几种选择。您可以编辑Host myserver HostName 1.2.3.4 文件并添加如下条目:

ssh myserver

现在,当您运行1.2.3.4时,ssh实际上会连接到主机~/.hosts

您还可以维护一个myserver 1.2.3.4 文件,其外观如下:

ssh

现在任何使用系统解析程序的内容 - 包括myserver - 都会将1.2.3.4翻译为var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World'); }); var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("http://%s:%s", host, port) });

答案 1 :(得分:4)

实际上,有一种方法。但是您需要定义两个别名。

首先:Bash手动状态(LESS=+/'^ALIASES' man bash

  

ALIASES   如果别名值的最后一个字符为空,则还会检查别名后面的下一个命令字的别名扩展。

另外documented in POSIX规范。 Thanks to @gniourf_gniourf链接:

  

如果替换单词的别名的值以< blank>结尾,则shell应检查下一个命令字以进行别名替换;此过程将继续,直到找到不是有效别名的单词或别名值不以< blank>结尾。

所以,如果你定义这两个别名(请保留最后的空格):

$ alias ssh='ssh '
$ alias myserver='192.168.0.1'
$ set -x
$ ssh myserver
+ ssh 192.168.0.1

用以下内容清除别名:

$ unalias ssh
$ unalias myserver

注1 :还记录在kshzsh手册中

Note2 :在dash中测试工作正常(未找到任何文档)。

Wikipedia entry on "alias" chaining

答案 2 :(得分:1)

larsks' helpful answer包含一个简洁的解释和一个特定于ssh使用的有用解决方案;用更通用的解释补充它:

BinaryZebra's helpful answer中描述的别名链接外,别名通常只能用作命令名称,而不能用作命令参数 ,至少不直接。

使用非文字(值占位符)作为命令参数 ,您有以下选项(不考虑其他shell expansions,例如globbing,大括号扩展,或算术扩展):

  • 引用变量;例如:ssh "$myserver",先前定义为例如myserver=1.2.3.4,例如~/.bashrc。在ssh "$(echo '1.2.3.4')"

  • 使用command substitution;即,一个stdout输出将作为参数值的命令;例如:# Define the function, typically in ~/.bashrc # "$@" safely passes all arguments through to `ssh`. # (If the arguments must partly go *before* the predefined argument, more work is needed.) sshmyserver() { ssh 1.2.3.4 "$@" } # Use the function, optionally with arguments. sshmyserver

但是,您也可以使用shell 函数为具有预定义参数的命令提供包装; e.g:

e.Handled = true