następujących zastosowań bash na printf %q
uciec wartości poprawnie niezależnie od ich treści. Gwarantuje to dosłownie dowolną możliwą wartość - cytaty, znaki nowej linii itp. - dopóki źródłem pozyskiwania powłoki jest bash i tak długo, jak używany system operacyjny obsługuje obiekt /proc/self/environ
udostępniany najpierw przez system Linux w celu emisji treści środowisko jako strumień rozdzielony NUL. Używa specjalnych formularzy cytowania, takich jak: $'\n'
, w razie potrzeby, więc jego wyniki mogą nie być honorowane przez czystych interpreterów POSIX.
#!/usr/bin/env bash
while IFS= read -r -d '' kvname; do
k=${kvname%%=*}
v=${kvname#*=}
printf '%q=%q\n' "$k" "$v"
done </proc/self/environ
Zauważ, że będziemy chcieli źródła wyjścia, nie uruchamiać go jako zewnętrznego pliku wykonywalnego, jeśli chcesz środowisko swojej bieżącej powłoki, aby zmienić. Jeśli nie chcesz, aby set -a
przed sourcingiem, dodaj wiodący export
do ciągu formatu.
Uruchomienie tego skryptu nie zrobić bardzo dużo, choć biorąc pod uwagę jak najszybciej jak to się robi działa to wychodzi, a środowisko jego rodzica nie zmienia się nieco. 'source my_env' ma więcej sensu, ale to nie wymaga' chmod + x'. –
dobry punkt usuwania + x jako jego szumy –