Bash

在 bash cli 中創建一個暱稱以替換沒有 $VARIABLE 的字元串

  • August 9, 2019

是否可以為常用字元串創建暱稱,而不使用’ $ ’ in front of $ 變數?

該字元串可以是固定的,並且在 shell 提示符的生命週期內不需要更改。

我知道有 bash $ variables but I am looking for a solution without using the ’ $ ’ 在 $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

有了這個:

$ 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

不這樣做:

$ 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

原因是,不帶 ’ 的輸入速度更快 $ ’ in front of each r1 r2 than $ r1 $ r2, so it would be great if I can drop the ’ $ '

對於 SSH 的特定案例,別名~/.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

對於實際呼叫命令行別名的其他案例,zsh 具有全域別名,使用alias -g. Bash 沒有這樣的東西。

alias -g r1=remote_server_1
ssh r1

全域別名的主要問題是它們會在任何地方觸發,即使它們沒有意義。

% echo r1
remote_server_1

但是如果它們是單詞的一部分,它們就不會觸發,所以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 \$'

引用自:https://unix.stackexchange.com/questions/282478