Я пытаюсь добавить некоторые функции в мой bashrc, а именно:

h () { history | fgrep $1 | sort -u | cut -b 8- }

extract () {
  if [ -f $1 ] ; then
      case $1 in
          *.tar.bz2)   tar xvjf $1    ;;
          *.tar.gz)    tar xvzf $1    ;;
          *.bz2)       bunzip2 $1     ;;
          *.rar)       rar e $1       ;;
          *.gz)        gunzip $1      ;;
          *.tar)       tar xvf $1     ;;
          *.tbz2)      tar xvjf $1    ;;
          *.tgz)       tar xvzf $1    ;;
          *.zip)       unzip $1       ;;
          *.Z)         uncompress $1  ;;
          *.7z)        7z x $1        ;;
          *)           echo "I don't know how to extract '$1'." ;;
      esac
  else
      echo "'$1' is not a valid file!"
  fi
}

используя следующую команду:

echo -e "\
h () { history | fgrep \044\061 | sort -u | cut -b 8- }  

extract () {
  if [ -f \044\061 ] ; then
      case \044\061 in
          *.tar.bz2)   tar xvjf \044\061    ;;
          *.tar.gz)    tar xvzf \044\061    ;;
          *.bz2)       bunzip2 \044\061     ;;
          *.rar)       rar e \044\061       ;;
          *.gz)        gunzip \044\061      ;;
          *.tar)       tar xvf \044\061     ;;
          *.tbz2)      tar xvjf \044\061    ;;
          *.tgz)       tar xvzf \044\061    ;;
          *.zip)       unzip \044\061       ;;
          *.Z)         uncompress \044\061  ;;
          *.7z)        7z x \044\061        ;;
          *)           echo \042I don't know how to extract '\044\061'.\042 ;;
      esac
  else
      echo \042'\044\061' is not a valid file\041\042
  fi
}" >> ~/.bashrc

... но это приводит к bash: /home/chris/.bashrc: line 123: syntax error: unexpected end of file при запуске bash. Если я удалю эти функции, эта ошибка исчезнет. Есть ли заключительное заявление, которое я должен добавить в раздел функций?

2 ответа2

2

Первая строка - это проблема.

h () { history | fgrep $1 | sort -u | cut -b 8- }

Измените это на это:

h () { history | fgrep $1 | sort -u | cut -b 8- ; }

Или же:

h () {
    history | fgrep $1 | sort -u | cut -b 8-
}

Кроме того, более простой / понятный способ вставить его в ваш .bashrc - это перенаправление (хотя вам по-прежнему нужно экранировать $).

cat >> .bashrc << EOF
h () { history | fgrep \$1 | sort -u | cut -b 8- ; }

extract () {
  if [ -f \$1 ] ; then
      case \$1 in
          *.tar.bz2)   tar xvjf \$1    ;;
          *.tar.gz)    tar xvzf \$1    ;;
          *.bz2)       bunzip2 \$1     ;;
          *.rar)       rar e \$1       ;;
          *.gz)        gunzip \$1      ;;
          *.tar)       tar xvf \$1     ;;
          *.tbz2)      tar xvjf \$1    ;;
          *.tgz)       tar xvzf \$1    ;;
          *.zip)       unzip \$1       ;;
          *.Z)         uncompress \$1  ;;
          *.7z)        7z x \$1        ;;
          *)           echo "I don't know how to extract '\$1'." ;;
      esac
  else
      echo "'\$1' is not a valid file!"
  fi
}
EOF
0

Измени свой шебанг на

#!/bin/bash -x

и снова запустите программу, чтобы получить построчную трассировку. Обычно неожиданным концом файла является незакрытая кавычка или скобка.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .