"py3start" 또는 "py3test" 별칭 명령을 식별하지 못한 채 다음 명령을 실행하려고 합니다. (사용하기 전에 별칭을 명시적으로 설정했는지 확인하기 위해 테스트 목적으로 "py3test"를 도입했습니다.):
command = "echo $SHELL; py3start; alias py3test='source ~/.venv/python3/bin/activate'; py3test"
stdout, stderr, status = connection.exec_command(command=command, timeout=timeout)
사용된 쉘이 /bin/bash이고 별칭이 ~/.bashrc 및 ~/.bash_profile 파일에 다음과 같이 정의되어 있고 'alias -p'의 출력이 다음과 같음에도 불구하고 별칭이 인식되지 않는 이유를 누군가가 알아내도록 도와주세요. 동일한 paramiko 세션을 통과했습니다. 위의 별칭이 포함되어 있습니다(마지막 스크린샷 참조).
이는 대상 VM에 있는 ~/.bashrc 및 ~/.bash_profile 파일의 내용입니다. 여기서 별칭 py3start를 설정했습니다.
[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'
답변1
적어도 두 가지 문제가 있습니다. 인용하다 man bash
:
셸이 비대화형인 경우 Shopt를 사용하여 Expand_aliases 셸 옵션을 설정하지 않으면 별칭이 확장되지 않습니다.
Bash는 해당 줄이나 복합 명령에서 명령을 실행하기 전에 항상 입력의 완전한 한 줄과 복합 명령을 구성하는 모든 줄을 읽습니다. 별칭은 명령이 실행될 때가 아니라 명령을 읽을 때 확장됩니다. 따라서 다른 명령과 같은 줄에 나타나는 별칭 정의는 다음 입력 줄을 읽을 때까지 적용되지 않습니다.
그래서 둘 다 필요해요
shopt -s expand_aliases
다음 개행 문자alias py3test=...