我在远程位置有许多 bash 别名。
但当我尝试从本地 Linux 机器运行它们时,
我收到“未找到命令”错误。例如
$ ssh root@remote 'status'
bash: status: command not found
在远程位置,状态定义为
$ alias status='ls /tmp/status'
如何在远程位置声明别名,
以便可以从任何位置调用它?
答案1
查看回答回答 Server Fault 上的类似问题。基本上,除非明确配置为这样做 ( ),否则 bash 不会在非交互式 shell 中扩展别名shopt -s expand_aliases
。此外,您必须确保.bashrc
即使在非交互式 shell 中也会对其进行评估。
答案2
你可以运行
ssh root@remote_mc 'bash -ic status'
以交互模式运行 shell 的另一个副本(这意味着它将从 bash 配置文件中加载别名)
启动第二个 shell 并不是一个很好的解决方案,但是它确实有效。
答案3
在我看来,如果您想创建许多别名,最好的解决方案是:
- 在
.bash_aliases
您的/home/"user_name"
- 在此文件中,您必须放入要在终端中使用的所有别名。例如,我的是:
别名 ll='ls -l'
别名 la='ls -A'
别名 mydu='du -s * .[^.]* | sort -n'
别名 apti='sudo apt-get install'
别名 aptr='sudo apt-get remove'
别名 aptu='sudo apt-get update'
别名 aptg='sudo apt-get upgrade'
别名 down='sudo ifconfig wlan0 down'
别名 up='sudo ifconfig wlan0 up'
别名 managed='sudo iwconfig wlan0 模式管理'
别名监视器 = 'sudo iwconfig wlan0 模式监视器'
别名 usb ='sudo mount /dev/sdc1 /mnt'
- 在您的
/home/"user_name"/.bashrc
文件中,输入以下几行:
# ~/.bash_aliases 中的更多别名定义如果 [ -f ~/.bash_aliases ]; 则 . ~/.bash_aliases fi
我把这一行放在文件的末尾,只是为了清楚起见。