I když jsou symbolické odkazy vyřešeny jádrem, stále můžete udělat trik LD_PRELOAD, zabalit všechny funkce knihovny libc, které přebírají názvy cest a rozšířit jakékoli $XYZ komponenty v řetězci vráceném 'readlink' (rozšíření parametrů). Poté vložte rozšířenou cestu do zabalené funkce. Při vytváření odkazu musíte uniknout z cílové cesty z expanze shellu, jak navrhuje jaztik.
Protože injektovaná knihovna má plný přístup do uživatelského prostředí, splní to všechna očekávání OP.
Ano. žádný problém. ve skutečnosti nebudete ve svém odkazu používat proměnnou $HOME, takže například nebude fungovat s chytrými řešeními pro skupiny uživatelů. Proměnná je přeložena shellem při provádění příkazu a obsah proměnné je použit v odkazu.
ln -s ~/test /tmp/test
je rozšířena na
/<path>/<to>/home/test -> /tmp/test
Ah a fungovat budou pouze proměnné prostředí osoby, která volá ln. V odkazu nemůžete ukládat proměnné prostředí jiných lidí. Před voláním příkazu se proměnné rozbalí.
Pokud nechcete proměnnou v odkazu rozšiřovat, můžete ji umístit do jednoduchých uvozovek,
ln -s '$HOME/file/or/folder' newname
To by dalo,
newname -> $HOME/file/or/folder
místo toho, aby se rozšířil do vaší lokálně nastavené $HOME. Jak je popsáno v jiných odpovědích, vůbec to nerozšíří. Můžete tedy např. použijte jej k symbolickému odkazu na soubor v doslovném $HOME
složka.
[Upozorňujeme, že toto je závislé na systému – ne všechny systémy podporují variantní symbolické odkazy]
Symbolické odkazy zpracovává jádro a jádro se nestará o proměnné prostředí. Takže ne.