Bash
在 bash cli 中創建一個暱稱以替換沒有 $VARIABLE 的字元串
是否可以為常用字元串創建暱稱,而不使用’ $ ’ 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 \$'