Vas*_*aou 3 bash alias variable
是否可以为常用字符串创建昵称,而无需在 $variables 前面使用“$”?
该字符串可以是固定的,并且在 shell 提示的生命周期内不需要更改。
我知道有 bash $variables,但我正在寻找一种解决方案,而不在 $variable 前面使用“$”,因此键入速度更快。
我知道有别名可以缩短整个命令,但我不想缩短命令,我只想缩短命令的一部分。
例如,我想替换这个:
$ ssh remote_server_1
$ scp remote_server_1
$ my_script.sh remote_server_1
$ ssh remote_server_2
$ scp remote_server_2
$ my_script.sh remote_server_2
Run Code Online (Sandbox Code Playgroud)
有了这个:
$ aliasthingy r1="remote_server_1"
$ aliasthingy r2="remote_server_2"
$ ssh r1
$ scp r1
$ my_script.sh r1
$ another_script.sh r1
$ ssh r2
$ scp r2
$ my_script.sh r2
$ another_script.sh r2
Run Code Online (Sandbox Code Playgroud)
不这样做:
$ export r1="build_server_r1"
$ export r2="build_server_r2"
$ ssh $r1
$ scp $r1
$ my_script.sh $r1
$ another_script.sh $r1
$ ssh $r2
$ scp $r2
$ my_script.sh $r2
$ another_script.sh $r2
Run Code Online (Sandbox Code Playgroud)
原因是,在每个 r1 r2 前面没有 '$' 的输入比 $r1 $r2 更快,所以如果我能去掉 '$' 那就太好了
对于 SSH 的特定用例,别名 in~/.ssh/config是可行的方法。这是将主机参数和一组选项缩写为 SSH 的方式。它们不仅不需要前面的$,而且不会在不要求通过 SSH 访问的主机名的上下文中使用,而且它们将用于要求通过 SSH 访问的主机名的其他上下文,例如 SSHFS, rsync 等
Host r1
HostName remote_server_1
UserName vassilis
Host r2
HostName remote_server_2
UserName vp
Host r2test
HostName remote_server_2
UserName guest
Run Code Online (Sandbox Code Playgroud)
对于实际需要命令行别名的其他用例, zsh 具有全局别名,定义为alias -g. Bash 没有这样的东西。
alias -g r1=remote_server_1
ssh r1
Run Code Online (Sandbox Code Playgroud)
全局别名的主要问题是它们会在任何地方触发,即使它们没有意义。
% echo r1
remote_server_1
Run Code Online (Sandbox Code Playgroud)
但是如果它们是单词的一部分,它们就不会触发,所以scp r1:/some/path .不起作用。
如果你想在 shell 命令行的任何地方工作,定义一个变量,然后输入$. 如果在键盘上打字真的很困难,您可以将其映射到更易于访问的键。例如,要M-v插入 a $,请将其放入您的.bashrc:
readline_insert () {
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${1}${READLINE_LINE:$READLINE_POINT:}"
((READLINE_POINT += ${#1}))
}
bind -x '\ev: readline_insert \$'
Run Code Online (Sandbox Code Playgroud)