Linux 시작 bash 문제: 명령 대체 문제

Linux 시작 bash 문제: 명령 대체 문제

내 환경에서 새 셸을 시작하려고 하는데 bash다음 명령에 문제가 있습니다.

$ bash
bash: command substitution: line 1: syntax error near unexpected token `then'
'ash: command substitution: line 1: `print -n "`logname`@`hostname`:$(tput sgr0)";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "
bash: command substitution: line 1: syntax error near unexpected token `then'
bash: command substitution: line 1: `print -n "`logname`@`hostname`:$(tput sgr0)";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "'

그럼 난 도망칠 수 없어

$ ")^C
bash: command substitution: line 2: syntax error near unexpected token `then'
'ash: command substitution: line 2: `print -n "`logname`@`hostname`:$(tput sgr0)";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "
bash: command substitution: line 1: syntax error near unexpected token `then'
bash: command substitution: line 1: `print -n "`logname`@`hostname`:$(tput sgr0)";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "'

그리고 쉘은 뒤에 남겨져야 합니다. 이는 서브쉘이 열린다는 의미인 것 같습니다.

그것이 여는 쉘은 내가 입력하는 모든 명령에 대해 위의 잘못된 네 줄을 반복한다는 점에서 이상한 동작을 합니다.

나는 그것을 보았지만 ~/.bashrc그것이 한 유일한 일은 umask 0022.

-x내 문제에 대해 많은 정보를 제공하지 않습니다

$ bash -x
+ umask 0022
++ tput bold
bash: command substitution: line 1: syntax error near unexpected token `then'
... same error

이것이 주석 줄의 내용과 연결될 수 있습니까 '?/ect/bashrc

if ! shopt -q login_shell ; then # We're not a login shell
   # Need to redefine pathmunge, it get's undefined at the end of /etc/profile
   pathmunge () {
     case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
     esac
   }

여기서 어디를 봐야 할까요? /etc/bashrc어떤 식으로든 수정/수정을 요청해야 합니까 ?

편집하다

누군가 제안했듯이 이것이 나에게서 오는 것일 수 있습니까 ~/.profile?

export PS1='$(tput bold)$(print -n "`logname`@`hostname`:$(tput sgr0)";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")'
trap 1 2 3

PATH=$PATH:$HOME/bin

export PATH
export HTTPD_HOME=/pvar/product/httpd

        export EDITOR=/bin/vi
        export FCEDIT=/bin/vi
        export VISUAL=/bin/vi
        export HISTSIZE=5000
        export TMOUT=0    

도움을 주시면 감사하겠습니다.

답변1

.profile빌드 프롬프트를 수정하기 위해 내가 변경해야 했던 줄( PS1):

export PS1='$(tput bold)$(print -n "`logname`@`hostname`:$(tput sgr0)";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")'

~이 되다

export PS1='$(tput bold)$(echo "`logname`@`hostname`:$(tput sgr0)" ; \
  if [[ "${PWD#$HOME}" != "$PWD" ]]; \
  then echo "~${PWD#$HOME}"; \
  else echo "${PWD}"; fi; echo "$ ")'

echo이제 나는 줄을 건너뛰는 것을 피하는 방법을 찾고 싶습니다 (bash printecho기본적으로 그것을 처리하지 않기 때문에 바꿔야 합니다 print).

관련 정보