انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید




نویسنده موضوع: خطای syntax error در ترمینال  (دفعات بازدید: 3886 بار)

0 کاربر و 5 مهمان درحال مشاهده موضوع.

آفلاین nino

  • Full Member
  • *
  • ارسال: 224
  • جنسیت : پسر
    • Gitlab
خطای syntax error در ترمینال
« : 25 خرداد 1397، 04:47 ب‌ظ »
سلام. چند روزی میشه که با باز کردن ترمینال، یک پیغام در ابتدای اون نشون داده میشه با این مضمون (عکسش رو هم پیوست کردم):
bash: /usr/share/bash-completion/bash_completion: line 171: syntax error near unexpected token `}'
bash: /usr/share/bash-completion/bash_completion: line 171: `}'

اون خط ۱۷۱ که در پیغام بهش اشاره شده، خط آخر این بخش از محتویات فایل bash_completion هست:
_upvar()
{
    if unset -v "$1"; then           # Unset & validate varname
        if (( $# == 2 )); then
            eval $1=\"\$2\"          # Return single value
        else
            eval $1=\(\"\${@:2}\"\)  # Return array
        fi
    fi
}

برای رفعش چکار باید کرد؟
آیا باید تغییراتی در خط ۱۷۱ بدم؟
...

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : خطای syntax error در ترمینال
« پاسخ #1 : 25 خرداد 1397، 05:18 ب‌ظ »
با سلام
این بلوک ظاهراً مشکلی نداره ، شاید یه { از قسمت های بالاتر پاک شده باشه و تقارن پرانتزها به هم خورده باشه. شما خروجی دستور زیر رو کامل بذارین تا دقیق تر بررسیش کنیم :
cat /usr/share/bash-completion/bash_completion

آفلاین مهران تعریف

  • Hero Member
  • *
  • ارسال: 707
  • جنسیت : پسر
  • دبیان + xfce
پاسخ : خطای syntax error در ترمینال
« پاسخ #2 : 25 خرداد 1397، 06:04 ب‌ظ »
خیلی سرمگرم کننده اس برام که وقتی این مشکلات پیش میاد، اون قدر بگردم تا مشکل رو پیدا کنم، اما دنبال راه حل باشی، بسته ی bash-completion رو ری ایسنتال کن.

آفلاین nino

  • Full Member
  • *
  • ارسال: 224
  • جنسیت : پسر
    • Gitlab
پاسخ : خطای syntax error در ترمینال
« پاسخ #3 : 25 خرداد 1397، 06:08 ب‌ظ »
خیلی سرمگرم کننده اس برام که وقتی این مشکلات پیش میاد، اون قدر بگردم تا مشکل رو پیدا کنم، اما دنبال راه حل باشی، بسته ی bash-completion رو ری ایسنتال کن.

دوباره نصب کردم اما درست نشد.
حتی توی یکی از انجمن ها هم نوشته بود که باید یه کاراکتری اضافه (یا حذف) بشه اما کاربران دیگه در زیر اون گفته بودن که این کار بهتره انجام نشه. یادم نیست نوشته بودن ممکنه این کار مشکل ایجاد کنه یا این که این راه حل دائمی نیست و دوباره با ری استارت به همون وضعیت قبل بر می گرده. به هر حال از اون کار منصرف شدم.
...

آفلاین nino

  • Full Member
  • *
  • ارسال: 224
  • جنسیت : پسر
    • Gitlab
پاسخ : خطای syntax error در ترمینال
« پاسخ #4 : 25 خرداد 1397، 06:13 ب‌ظ »
با سلام
این بلوک ظاهراً مشکلی نداره ، شاید یه { از قسمت های بالاتر پاک شده باشه و تقارن پرانتزها به هم خورده باشه. شما خروجی دستور زیر رو کامل بذارین تا دقیق تر بررسیش کنیم :
cat /usr/share/bash-completion/bash_completion

متاسفانه هر چی سعی می کنم متن رو آپلود کنم انجمن ارور میده: دوباره تلاش کنید!
« آخرین ویرایش: 25 خرداد 1397، 06:15 ب‌ظ توسط Nino »
...

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : خطای syntax error در ترمینال
« پاسخ #5 : 25 خرداد 1397، 06:17 ب‌ظ »
دوباره نصب کردم اما درست نشد.
حتی توی یکی از انجمن ها هم نوشته بود که باید یه کاراکتری اضافه (یا حذف) بشه اما کاربران دیگه در زیر اون گفته بودن که این کار بهتره انجام نشه. یادم نیست نوشته بودن ممکنه این کار مشکل ایجاد کنه یا این که این راه حل دائمی نیست و دوباره با ری استارت به همون وضعیت قبل بر می گرده. به هر حال از اون کار منصرف شدم.
دوست عزیز شما خروجی دستوری رو که دادم ، رو بذارین تا ما بررسی کنیم چون توی این جور مواقع قرار نیست راه حلی که به دیگران پیشنهاد دادن برای شما هم کارساز باشه.


پ.ن: نصب دوباره به تنهایی بدرد نمی خوره چون اگه فایلی به اسم bash-completion وجود داشته باشه ، apt هیچ وقت اون رو بازنویسی نمی کنه.
اگه می خواین با متدی که مهران جان گفتن مشکلتون رو حل کنین اول باید فایل رو از دسترس خارج کنین بعدش ری ایسنتال کنین :
sudo mv /usr/share/bash-completion/bash_completion /usr/share/bash-completion/bash_completion.bak
sudo apt install --reinstall bash-completion

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : خطای syntax error در ترمینال
« پاسخ #6 : 25 خرداد 1397، 06:18 ب‌ظ »
متاسفانه هر چی سعی می کنم متن رو آپلود کنم انجمن ارور میده: دوباره تلاش کنید!
می تونین از سرویس pastebin استفاده کنین. شاید محدودیت کارکتر برای ارسال ها گذاشته شده باشه. البته قبل از ارسال ، متد ری اینستال رو هم تست کنین

آفلاین nino

  • Full Member
  • *
  • ارسال: 224
  • جنسیت : پسر
    • Gitlab
پاسخ : خطای syntax error در ترمینال
« پاسخ #7 : 25 خرداد 1397، 06:24 ب‌ظ »
می تونین از سرویس pastebin استفاده کنین. شاید محدودیت کارکتر برای ارسال ها گذاشته شده باشه.
بله ظاهرا به خاطر محدودیت کاراکتره: https://paste.ubuntu.ir/jrcy

البته قبل از ارسال ، متد ری اینستال رو هم تست کنین
توزیع من آرچه. فایل bash_completion رو حذف کردم و برنامه رو با این دستور دوباره نصب کردم (ظاهرا اگر برنامه ای از قبل وجود داشته باشه، پکمن اون رو از اول reinstall می کنه):
sudo pacman -S bash-completion
اما همچنان مشکل پابرجاست.
« آخرین ویرایش: 25 خرداد 1397، 06:42 ب‌ظ توسط Nino »
...

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : خطای syntax error در ترمینال
« پاسخ #8 : 25 خرداد 1397، 06:43 ب‌ظ »
عجیبه من تست کردم فایل مشکلی نداشت !

این فایل رو بعد reinstall گذاشتین ؟ یا همون قبلیه هستش ؟

من این محتویات رو توی یک فایل به اسم src ریختم و دستور زیر رو زدم و هیچ خطایی نداد :
source src
شما دستور زیر رو وارد کنین و خروجی رو بذارین :
source /usr/share/bash-completion/bash_completion

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : خطای syntax error در ترمینال
« پاسخ #9 : 25 خرداد 1397، 06:48 ب‌ظ »
توزیع من آرچه. فایل bash_completion رو حذف کردم و برنامه رو با این دستور دوباره نصب کردم (ظاهرا اگر برنامه ای از قبل وجود داشته باشه، پکمن اون رو از اول reinstall می کنه):
sudo pacman -S bash-completion
اما همچنان مشکل پابرجاست.

بله ظاهراً مشکل اصن از اون فایل نیستش شاید باید جای دیگه ای دنبال مشکل گشت برای این قضیه خروجی این دستورات رو هم بذارین :
cat .profile
cat .bashrc

آفلاین nino

  • Full Member
  • *
  • ارسال: 224
  • جنسیت : پسر
    • Gitlab
پاسخ : خطای syntax error در ترمینال
« پاسخ #10 : 25 خرداد 1397، 06:51 ب‌ظ »
عجیبه من تست کردم فایل مشکلی نداشت !

این فایل رو بعد reinstall گذاشتین ؟ یا همون قبلیه هستش ؟

من این محتویات رو توی یک فایل به اسم src ریختم و دستور زیر رو زدم و هیچ خطایی نداد :
source src
متنی که بالاتر لینکش رو گذاشتم برای قبل از reinstall هست.
اینم لینک متن فایل بعد از reinstall هست: https://paste.ubuntu.ir/aktd

شما دستور زیر رو وارد کنین و خروجی رو بذارین :
source /usr/share/bash-completion/bash_completion
خروجی:
bash: /usr/share/bash-completion/bash_completion: line 171: syntax error near unexpected token `}'
bash: /usr/share/bash-completion/bash_completion: line 171: `}'
« آخرین ویرایش: 25 خرداد 1397، 07:01 ب‌ظ توسط Nino »
...

آفلاین nino

  • Full Member
  • *
  • ارسال: 224
  • جنسیت : پسر
    • Gitlab
پاسخ : خطای syntax error در ترمینال
« پاسخ #11 : 25 خرداد 1397، 07:01 ب‌ظ »
بله ظاهراً مشکل اصن از اون فایل نیستش شاید باید جای دیگه ای دنبال مشکل گشت برای این قضیه خروجی این دستورات رو هم بذارین :
cat .profile
cat .bashrc

خروجی cat .bash_profile (البته فکر کنم به اشتباه cat .profile نوشته شده بود):
#
# ~/.bash_profile
#

if [ -f ~/.bashrc ]; then
source . ~/.bashrc
fi

و خروجی cat .bashrc:
#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

#Purple:
PS1='\[\033[1;35m\] \w\[\033[1;31m\] ►►►\[\033[0m\] '

#force_color_prompt=yes

pacman -Q | wc -l
...

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : خطای syntax error در ترمینال
« پاسخ #12 : 25 خرداد 1397، 07:09 ب‌ظ »
خروجی cat .bash_profile (البته فکر کنم به اشتباه cat .profile نوشته شده بود):
نه ما هم  ~/.bash_profile داریم هم .profile ولی سلسله مراتب این طوری هستش که اگه ~/.bash_profile یا ~/.bash_login وجود داشته باشه ~/.profile خونده نمی شه.
بگذریم ... از اون خروجی source مشخصه که مشکل از bash_completion هستش. ولی چیزی که خیلی عجیبه اینه که من هر چی تست می کنم مشکلی با این فایل ندارم ! شاید به خاطر نسخه ی پکیج ها و ... باشه.


متنی که بالاتر لینکش رو گذاشتم برای قبل از reinstall هست.
اینم لینک متن فایل بعد از reinstall هست: https://paste.ubuntu.ir/aktd
من با diff یه چکی انجام دادم و هر دو فایل یکسان بودن.

برای اینکه به مشکل نزدیک تر بشیم شما این محتویات رو توی یک فایل بریزین :
#!/bin/bash
_upvar()
{
    if unset -v "$1"; then           # Unset & validate varname
        if (( $# == 2 )); then
            eval $1=\"\$2\"          # Return single value
        else
            eval $1=\(\"\${@:2}\"\)  # Return array
        fi
    fi
}

و بعدش اول دسترسی اجرایی بدین و اجراش کنین :
chmod +x src
./src
source src

این بلوک برای من خطایی نداشت می خوام ببینم برای شما خطا می ده یا نه
« آخرین ویرایش: 25 خرداد 1397، 07:13 ب‌ظ توسط علی رزم دیده »

آفلاین nino

  • Full Member
  • *
  • ارسال: 224
  • جنسیت : پسر
    • Gitlab
پاسخ : خطای syntax error در ترمینال
« پاسخ #13 : 25 خرداد 1397، 07:22 ب‌ظ »
نه ما هم  ~/.bash_profile داریم هم .profile ولی سلسله مراتب این طوری هستش که اگه ~/.bash_profile یا ~/.bash_login وجود داشته باشه ~/.profile خونده نمی شه.
البته من دستور cat .profile رو هم اجرا کردم ولی پیغام داد که چنین فایلی وجود نداره.

برای اینکه به مشکل نزدیک تر بشیم شما این محتویات رو توی یک فایل بریزین :
#!/bin/bash
_upvar()
{
    if unset -v "$1"; then           # Unset & validate varname
        if (( $# == 2 )); then
            eval $1=\"\$2\"          # Return single value
        else
            eval $1=\(\"\${@:2}\"\)  # Return array
        fi
    fi
}

و بعدش اول دسترسی اجرایی بدین و اجراش کنین :
chmod +x src
./src
source src

این بلوک برای من خطایی نداشت می خوام ببینم برای شما خطا می ده یا نه
طبق دستورات، اسکریپت رو اجرا کردم. دستور ./src در جواب هیچ پیغامی نداد.
اما دستور source src این پیغام رو میده:
bash: ./src: line 11: syntax error near unexpected token `}'
bash: ./src: line 11: `}'
« آخرین ویرایش: 25 خرداد 1397، 08:27 ب‌ظ توسط Nino »
...

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : خطای syntax error در ترمینال
« پاسخ #14 : 25 خرداد 1397، 09:09 ب‌ظ »
شرمنده یه مشکلی پیش اومد مجبور شدم یه لحظه برم ...


البته من دستور cat .profile رو هم اجرا کردم ولی پیغام داد که چنین فایلی وجود نداره.
بله حضور این فایل (مثل bash_profile) اجباری نیست و برای مثال من هم bash_profile رو ندارم ولی بش هر دوی اونا رو (البته با اون سلسله مراتبی که گفتم) می خونه.


bash: ./src: line 11: syntax error near unexpected token `}'
bash: ./src: line 11: `}'
اینکه چرا این سینتکس برای source شما داره خطا می ده واقعاً عجیبه ولی یه حدسی در این مورد دارم ...
برای چک کردن حدسم یه فایل به اسم src ایجاد کنین و محتویات زیر رو توی اون قرار بدین :
#!/bin/bash
_upvar()
{
 echo $PATH
}
_upvar
حالا با دستور زیر اونو سورس کنین :
source src