我尝试执行以下命令,但无法成功识别'py 3start'或'py 3 test'别名命令-(我引入'py 3 test'用于测试目的,以检查在使用它之前显式设置别名是否会产生任何差异):
command = "echo $SHELL; py3start; alias py3test='source ~/.venv/python3/bin/activate'; py3test"
stdout, stderr, status = connection.exec_command(command=command, timeout=timeout)
请看下面的输出:
请有人能帮我弄清楚为什么别名不被识别,即使使用的shell是/bin/bash,别名在~/.bashrc和~/.bash_profile文件中定义如下,并且,'alias -p'的输出包括通过相同paramiko会话的别名(参考最后一个屏幕截图)。
这些是目标VM上的~/.bashrc和~/.bash_profile文件的内容-我在其中设置别名py 3start。
[root@VM ~]# cat ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias py3start='source ~/.venv/python3/bin/activate'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[root@VM ~]# cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
alias py3start='source ~/.venv/python3/bin/activate'
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
[root@VM ~]#
当命令中包含'alias -p'时,请参见下面的输出-显然,它在这里找到了别名,但当我尝试使用它们时仍然没有找到它们:
command = "echo $SHELL; py3start; alias py3test='source ~/.venv/python3/bin/activate'; alias -p; py3test"
stdout, stderr, status = connection.exec_command(command=command, timeout=timeout)
stderr = {str} 'bash: py3start: command not found\nbash: py3test: command not found\n'
stdout:
1条答案
按热度按时间dldeef671#
默认情况下,别名仅在交互式shell中 * 展开 *。执行交互式shell,或者在本例中更简单地使用
shopt -s expand_aliases
显式启用别名扩展。