Проблема с запуском bash в Linux: проблема с подстановкой команд

Я пытаюсь запустить новую оболочку в своей среде, но у команды 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 ?

edit

Как было предложено кем-то, могло ли это исходить из моего ~ / .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    

Любая помощь приветствуется, спасибо.

0
10.05.2016, 17:52
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 для пропуска строки (у меня было заменить print на echo , потому что по умолчанию bash не обрабатывает print ).

1
28.01.2020, 02:48

Теги

Похожие вопросы