我在google上看了这个,但之前似乎没有人问过这个问题。有没有办法设置别名并将其用作程序的命令行参数?
例如
ssh myserver
和myserver
被定义为我服务器的IP地址
答案 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 :还记录在ksh
和zsh
手册中
Note2 :在dash
中测试工作正常(未找到任何文档)。
答案 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