HeadlinesBriefing HeadlinesBriefing 10 languages

Don't Put Tilde In Your Path

Hacker News ·

🇬🇧 English

A common pitfall in shell configuration is using a tilde (~) inside quoted strings when setting the PATH variable. When users add entries like `export PATH="$PATH:~/.local/bin/"` to their `.bashrc` or `.zshrc`, the tilde does not expand to the home directory. Instead, it is treated as a literal character, resulting in a relative path `./~/.local/bin/` being added to the environment variable. This occurs because tilde expansion only happens on unquoted words starting with `~`.

To resolve this, users should explicitly use the `$HOME` variable, such as `export PATH="$PATH:$HOME/.local/bin/"`. While the unquoted version `export PATH=$PATH:~/.local/bin` works in Bash and Zsh, it is fragile and can break if whitespace is introduced. The issue can be quickly diagnosed by running `echo "$PATH" | grep '~'`. If any output is returned, the configuration files should be updated to replace `~` with `$HOME`.

View original article →


🇸🇦 العربية

التمديد (~) في PATH لا يتوسع إلى دليل HOME

عيب شائع في إعدادات الشل هو استخدام تيلدا (~) داخل علامات اقتباس عند تعيين المتغير PATH. عندما يضيف المستخدمون سطرًا مثل `export PATH="$PATH:~/.local/bin/"` في ملف `.bashrc` أو `.zshrc`، فإن التيلدا لا يتوسع إلى دليل المنزل، بل يُعامل كحرف حروفى، مما يؤدي إلى إضافة مسار نسبي `./~/.local/bin/` إلى المتغير البيئي. يحدث ذلك لأن توسيع التيلدا يحدث فقط على الكلمات غير المغلقة التي تبدأ بـ `~`.

لحل هذه المشكلة، يجب على المستخدمين استخدام المتغير `$HOME` بشكل صريح، مثل `export PATH="$PATH:$HOME/.local/bin/"`. بينما يعمل الإصدار غير المغلوق `export PATH=$PATH:~/.local/bin` في Bash و Zsh، فإنه هش ويمكن أن يتوقف عن العمل إذا تم إدخال مسافات. يمكن تشخيص المشكلة بسرعة عن طريق تشغيل `echo "$PATH" | grep '~'`. إذا أعاد أي ناتج، يجب تحديث ملفات التكوين لاستبدال `~` بـ `$HOME`.

لماذا لا يتوسع التيلدا (~) في متغير PATH الخاص بي؟

التوسيع يحدث فقط على الكلمات غير المغلقة. عندما تستخدم `export PATH="$PATH:~/.local/bin/"`، فإن التيلدا داخل علامات اقتباس مزدوجة، لذا يُعامل كحرف حروفى وليس كاختصار لدليل المنزل. استخدم `$HOME` بدلاً من ذلك.

العربية version →


🇧🇩 বাংলা

PATH-এ টিলড (~) HOME ডায়েরেক্টরিতে বিস্তারিত হয় না

শেল কনফিগারেশনের একটি সাধারণ সমস্যা হল শেল কনফিগারেশনে টিলড (~) চিহ্নটি ব্যবহার করা যখন PATH ভেরিয়েবল সেট করার সময়। যখন ব্যবহারকারী `.bashrc` অথবা `.zshrc`-এ `export PATH="$PATH:~/.local/bin/"`-এর মতো লাইন যোগ করে, তখন টিলড HOME ডায়েরেক্টরিতে বিস্তারিত হয় না, বরং একটি লিটার্যাল চিহ্ন হিসেবে ব্যবহার হয়, ফলে `./~/.local/bin/`-এর মতো রিলেটিভ পাথটি এনভায়রনমেন্ট ভেরিয়েবল-এ যোগ হয়। এটি তখন ঘটে কারণ টিলড শব্দটি শুন্য করে না যে `~` থেকে শুরু হওয়া শব্দে শুধু ওপরি হয়।

এই সমস্যা সমাধানের জন্য, ব্যবহারকারী $HOME ভেরিয়েবলটি স্পষ্টভাবে ব্যবহার করতে হবে, যেমন `export PATH="$PATH:$HOME/.local/bin/"`। যদিও অ-কোটেড সংস্করণ `export PATH=$PATH:~/.local/bin` Bash এবং Zsh-এ কাজ করে, তবে এটি নরম এবং যদি স্পেস যোগ করা হয় তাহলে কাজ করতে পারে। সমস্যা দ্রুত নিরার্জন করতে `echo "$PATH" | grep '~'` চালান। যদি কোনো আউটপুট পাওয়া যায়, তবে কনফিগারেশন ফাইলে `~`-কে `$HOME`-এর সাথে রিপ্লেস করতে হবে।

কেন টিলড (~) আমার PATH ভেরিয়েবল-এ বিস্তারিত হয় না?

টিলড শব্দটি শুন্য করে না যে শব্দটি `~` থেকে শুরু হয়। যখন আপনি `export PATH="$PATH:~/.local/bin/"` ব্যবহার করেন, তখন টিলড ডাবল কোটের মধ্যে থাকে, তাই এটি একটি লিটার্যাল চিহ্ন হিসেবে ব্যবহৃত হয় এবং HOME ডায়েরেক্টরির শর্টকাট হিসেবে কাজ করে না। $HOME ব্যবহার করুন।

বাংলা version →


🇪🇸 Español

El tilde en PATH no se expande al directorio HOME

Un error común en la configuración de shell es usar un tilde (~) dentro de comillas al establecer la variable PATH. Cuando los usuarios añaden líneas como `export PATH="$PATH:~/.local/bin/"` en su `.bashrc` o `.zshrc`, el tilde no se expande al directorio de inicio, sino que se trata como un carácter literal, lo que resulta en una ruta relativa `./~/.local/bin/` siendo agregada a la variable de entorno. Esto ocurre porque la expansión del tilde solo ocurre en palabras sin comillas que comienzan con `~`.

Para resolverlo, los usuarios deben usar explícitamente la variable `$HOME`, por ejemplo `export PATH="$PATH:$HOME/.local/bin/"`. Aunque la versión sin comillas `export PATH=$PATH:~/.local/bin` funciona en Bash y Zsh, es frágil y puede fallar si se introduce un espacio. El problema se puede diagnosticar rápidamente ejecutando `echo "$PATH" | grep '~'`. Si se devuelve alguna salida, los archivos de configuración deben actualizarse para reemplazar `~` por `$HOME`.

¿Por qué el tilde (~) no se expande en mi variable PATH?

La expansión del tilde solo ocurre en palabras sin comillas. Cuando usas `export PATH="$PATH:~/.local/bin/"`, el tilde está dentro de comillas dobles, por lo que se trata como un carácter literal y no como un atajo para el directorio de inicio. Usa `$HOME` en su lugar.

Español version →


🇫🇷 Français

Le tilde (~) ne s'expand pas dans la variable PATH

Une faille courante dans la configuration du shell consiste à utiliser un tilde (~) dans des chaînes de caractères entre guillemets lors de la définition de la variable PATH. Lorsque les utilisateurs ajoutent des lignes comme `export PATH="$PATH:~/.local/bin/"` dans leur `.bashrc` ou `.zshrc`, le tilde ne s'expand pas vers le répertoire d'accueil, mais est traité comme un caractère littéral, ce qui entraîne l'ajout d'un chemin relatif `./~/.local/bin/` à la variable d'environnement. Cela se produit parce que l'expansion du tilde ne se produit que sur les mots non entre guillemets commençant par `~`.

Pour résoudre ce problème, les utilisateurs doivent utiliser explicitement la variable `$HOME`, par exemple `export PATH="$PATH:$HOME/.local/bin/"`. Bien que la version non entre guillemets `export PATH=$PATH:~/.local/bin` fonctionne dans Bash et Zsh, elle est fragile et peut casser si des espaces sont introduits. Le problème peut être rapidement diagnostiqué en exécutant `echo "$PATH" | grep '~'`. Si un résultat est retourné, les fichiers de configuration doivent être mis à jour pour remplacer `~` par `$HOME`.

Pourquoi le tilde (~) ne s'expand pas dans ma variable PATH ?

L'expansion du tilde ne se produit que sur les mots non entre guillemets. Lorsque vous utilisez `export PATH="$PATH:~/.local/bin/"`, le tilde est à l'intérieur de guillemets doubles, donc il est traité comme un caractère littéral et non comme un raccourci vers le répertoire d'accueil. Utilisez `$HOME` à la place.

Français version →


🇮🇳 हिन्दी

PATH में टिल्डे (~) HOME डायरेक्टरी में विस्तारित नहीं होता

एक आम समस्या जो शेल कॉन्फ़िगरेशन में होती है, वह यह है कि टिल्डे (~) को उद्धरण वाले स्ट्रिंग में PATH चर सेट करते समय उपयोग किया जाता है। जब उपयोगकर्ता अपने `.bashrc` या `.zshrc` में `export PATH="$PATH:~/.local/bin/"` जैसी पंक्तियाँ जोड़ते हैं, तो टिल्डे वास्तव में HOME डायरेक्टरी में विस्तारित नहीं होता है, बल्कि एक लिटरल चरित्र के रूप में व्यवहार किया जाता है, जिससे `./~/.local/bin/` जैसी रिलेटिव पाथ को एनवायरनमेंट वरिएबल में जोड़ दिया जाता है। यह इसलिए होता है क्योंकि टिल्डे का विस्तार केवल उन शब्दों पर होता है जो अनक्वोटेड हैं और `~` से शुरू होते हैं।

इस समस्या का समाधान करने के लिए, उपयोगकर्ता को स्पष्ट रूप से `$HOME` वेरिएबल का उपयोग करना चाहिए, जैसे `export PATH="$PATH:$HOME/.local/bin/"`। जबकि अनक्वोटेड संस्करण `export PATH=$PATH:~/.local/bin` बश और ज़fsh में काम करता है, यह नाजुक है और यदि स्पेस पेश हो तो काम करना बंद कर सकता है। समस्या को जल्दी से निदान करने के लिए `echo "$PATH" | grep '~'` चलाएँ। यदि कोई आउटपुट मिलता है, तो कॉन्फ़िगरेशन फ़ाइलों को अपडेट करके `~` को `$HOME` से बदलना चाहिए।

क्यों टिल्डे (~) मेरे PATH वेरिएबल में विस्तारित नहीं होता?

टिल्डे केवल अनक्वोटेड शब्दों पर विस्तारित होता है। जब आप `export PATH="$PATH:~/.local/bin/"` का उपयोग करते हैं, तो टिल्डे डबल कोट्स के भीतर होता है, इसलिए यह एक लिटरल चरित्र के रूप में व्यवहार किया जाता है और HOME डायरेक्टरी का शॉर्टकट नहीं। $HOME का उपयोग करें।

हिन्दी version →


🇯🇵 日本語

PATH での ~ が HOME ディレクトリに展開されない

シェル設定の一般的な落とし穴は、引用された文字列内で tilde (~) を使用して PATH 変数を設定することです。ユーザーが `.bashrc` または `.zshrc` に `export PATH="$PATH:~/.local/bin/"` のような行を追加すると、tilde はホームディレクトリに展開されず、文字として扱われ、相対パス `./~/.local/bin/` が環境変数に追加されます。これは tilde の展開が `~` で始まる未引用の単語でのみ発生するためです。

この問題を解決するには、ユーザーは明示的に `$HOME` 変数を使用する必要があります。例えば `export PATH="$PATH:$HOME/.local/bin/"`。未引用版 `export PATH=$PATH:~/.local/bin` は Bash と Zsh で動作しますが、空白が入ると脆くなり、壊れやすいです。問題を迅速に診断するには `echo "$PATH" | grep '~'` を実行します。出力に `~` が含まれている場合は、設定ファイルを更新して `~` を `$HOME` に置き換える必要があります。

日本語 version →


🇧🇷 Português

O tilde em PATH não expande para o diretório HOME

Um erro comum na configuração do shell é usar um tilde (~) dentro de aspas ao definir a variável PATH. Quando os usuários adicionam linhas como `export PATH="$PATH:~/.local/bin/"` em seu `.bashrc` ou `.zshrc`, o tilde não se expande para o diretório home, mas é tratado como um caractere literal, resultando em um caminho relativo `./~/.local/bin/` sendo adicionado à variável de ambiente. Isso ocorre porque a expansão do tilde ocorre apenas em palavras não entre aspas que começam com `~`.

Para resolver, os usuários devem usar explicitamente a variável `$HOME`, por exemplo `export PATH="$PATH:$HOME/.local/bin/"`. Embora a versão não entre aspas `export PATH=$PATH:~/.local/bin` funcione no Bash e Zsh, ela é frágil e pode falhar se houver espaços. O problema pode ser diagnosticado rapidamente executando `echo "$PATH" | grep '~'`. Se qualquer saída for retornada, os arquivos de configuração devem ser atualizados para substituir `~` por `$HOME`.

Por que o tilde (~) não expande na minha variável PATH?

A expansão do tilde ocorre apenas em palavras não entre aspas. Quando você usa `export PATH="$PATH:~/.local/bin/"`, o tilde está dentro de aspas duplas, portanto é tratado como um caractere literal e não como um atalho para o diretório home. Use `$HOME` em vez disso.

Português version →


🇷🇺 Русский

Тильда (~) в PATH не расширяется до каталога HOME

Частая проблема в настройке оболочки заключается в использовании тильды (~) в кавычках при задании переменной PATH. Когда пользователи добавляют строки вроде `export PATH="$PATH:~/.local/bin/"` в свой `.bashrc` или `.zshrc`, тильда не расширяется до домашнего каталога, а воспринимается как символ, что приводит к добавлению относительного пути `./~/.local/bin/` в переменную среды. Это происходит потому, что расширение тильды происходит только для нецитированных слов, начинающих с `~`.

Чтобы решить эту проблему, пользователи должны явно использовать переменную `$HOME`, например `export PATH="$PATH:$HOME/.local/bin/"`. Хотя вариант без кавычек `export PATH=$PATH:~/.local/bin` работает в Bash и Zsh, он хрупкий и может сломаться при введении пробелов. Проблему можно быстро диагностировать, выполнив `echo "$PATH" | grep '~'`. Если вывод содержит `~`, файлы конфигурации следует обновить, заменив `~` на `$HOME`.

Почему тильда (~) не расширяется в моей переменной PATH?

Расширение тильды происходит только для нецитированных слов. Когда вы используете `export PATH="$PATH:~/.local/bin/"`, тильда находится внутри кавычек, поэтому она рассматривается как символ, а не как сокращение домашнего каталога. Используйте `$HOME` вместо этого.

Русский version →


🇨🇳 简体中文

PATH 中的 ~ 不会扩展到 HOME 目录

一个常见的 shell 配置陷阱是使用引号内的 tilde (~) 来设置 PATH 变量。当用户在 .bashrc 或 .zshrc 中添加类似 `export PATH="$PATH:~/.local/bin/"` 的条目时,tilde 不会扩展为家目录,而是被视为字面字符,导致相对路径 `./~/.local/bin/` 被添加到环境变量。这是因为 tilde 只在未引用的以 ~ 开头的单词上进行扩展。

为了解决此问题,用户应显式使用 $HOME 变量,例如 `export PATH="$PATH:$HOME/.local/bin/"`。虽然未引用的版本 `export PATH=$PATH:~/.local/bin` 在 Bash 和 Zsh 中可用,但它很脆弱,一旦出现空格问题就会失效。可通过运行 `echo "$PATH" | grep '~'` 快速诊断问题。如果返回任何结果,则需在配置文件中将 ~ 替换为 $HOME。

为什么我的 PATH 变量中 tilde (~) 不会扩展?

Tilde 只在未引用的单词上进行扩展。当你使用 `export PATH="$PATH:~/.local/bin/"` 时,tilde 位于双引号内,因此被视为字面字符而非家目录的快捷方式。请改用 $HOME。

简体中文 version →