cargo: command not found — جوه VS Code بس

bash: cargo: command not found

العَرَض

في التيرمنال العادي كل حاجة تمام:

$ cargo --version
cargo 1.97.1 (c980f4866 2026-06-30)

وفي التيرمنال اللي جوه VS Code، نفس الأمر بالظبط:

bash: cargo: command not found

وغالباً rust-analyzer كمان مش شغال، وبيقول إنه مش لاقي الأدوات.

السبب

rustup بيثبّت كل حاجة في ~/.cargo/bin، وعشان الـ shell يلاقيها بيضيف السطر ده لملف إعدادات الـ shell عندك (~/.profile أو ~/.bashrc أو ~/.zshenv):

. "$HOME/.cargo/env"

الملفات دي بتتقرا لما الـ shell يبدأ. بس لما تفتح VS Code من أيقونة سطح المكتب، هو مش بيبدأ من shell — بيتشغّل من مدير النوافذ مباشرة، وبيورث المسار المحدود بتاع جلسة الرسوميات. التيرمنال اللي جواه بيورث المسار الناقص ده منه.

عشان كده الفرق مش عشوائي: كل حاجة مفتوحة من التيرمنال بتشوف cargo، وكل حاجة مفتوحة من الأيقونة مش بتشوفه.

الحل

الحل الأول والأبسط: افتح المحرر من التيرمنال

cd ~/projects/hello
code .

كده VS Code بيورث كل المسار من الـ shell اللي شغّله، وكل حاجة بتشتغل. النقطة في code . معناها “افتح المجلد الحالي”.

خد بالك إن ده لازم يكون مجلد المشروع اللي فيه Cargo.toml مباشرة، وإلا هتقع في مشكلة تانية.

الحل التاني: تأكد إن السطر موجود أصلاً

grep -r 'cargo/env' ~/.profile ~/.bashrc ~/.zshenv 2>/dev/null

لو مطلعش حاجة، ضيفه بنفسك:

echo '. "$HOME/.cargo/env"' >> ~/.profile

وبعدين اقفل الجلسة وافتحها تاني — أو source ~/.profile لو عايز تجرّب على طول.

الحل التالت: خلّي الجلسة الرسومية نفسها تشوف المسار

على أغلب توزيعات لينكس، ~/.profile بيتقرا وقت تسجيل الدخول للجلسة الرسومية — فالسطر اللي فوق بيكفي بعد إعادة تسجيل الدخول. لو مكفاش، ممكن تحط المسار في إعدادات التيرمنال بتاع VS Code:

{
  "terminal.integrated.env.linux": {
    "PATH": "${env:HOME}/.cargo/bin:${env:PATH}"
  }
}

ده بيصلّح التيرمنال بس. rust-analyzer بياخد المسار من عملية VS Code نفسها، فالحل الأول أشمل.

إزاي تتأكد إيه اللي حصل بالظبط

جوه تيرمنال VS Code:

echo $PATH | tr ':' '\n' | grep cargo

لو مطلعش أي سطر، فالمسار فعلاً ناقص وده تأكيد للتشخيص. وقارنه بنفس الأمر في التيرمنال العادي — هتلاقي /home/<user>/.cargo/bin موجود هناك.

ليه بيحصل ده

دي مش مشكلة في Rust ولا في VS Code. دي طريقة شغل متغير PATH على لينكس و‏macOS: كل عملية بتورث بيئتها من العملية اللي شغّلتها، ومفيش مكان واحد مركزي بيتقرا للكل.

التطبيق المفتوح من الأيقونة أبوه هو مدير الجلسة الرسومية، مش الـ shell — فهو بيورث بيئة مختلفة تماماً، وأقل بكتير.

نفس الحكاية بتحصل مع أدوات تانية كتير بتتثبّت في مجلد المستخدم: nvm وpyenv وrbenv كلهم بيقعوا في نفس المصيدة.

النقاش

لو عندك سؤال أو لقيت غلطة في الصفحة دي، اكتبها فيالنقاشات على GitHub. كل صفحة ليها موضوعها الخاص.