shell 如何在paramiko SSHClient连接中使用alias命令?

kknvjkwl  于 2023-05-23  发布在  Shell
关注(0)|答案(1)|浏览(131)

我尝试执行以下命令,但无法成功识别'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:

dldeef67

dldeef671#

默认情况下,别名仅在交互式shell中 * 展开 *。执行交互式shell,或者在本例中更简单地使用shopt -s expand_aliases显式启用别名扩展。

相关问题