Почему я изменяю переменную ENV и повторяю ее в той же команде , Я не вижу нового значения? [дубликат]

Вы ищете local-fs.target(для локальных файловых систем) и remote-fs.target(для сетевых файловых систем). Они задокументированы на странице systemd.special.

См. также директиву RequiresMountsForв systemd.unit.

1
24.05.2018, 22:07
3 ответа

Realice la sustitución en un subshell en lugar del shell actual.

PATH=abc:$PATH sh -c 'echo $PATH'
1
27.01.2020, 23:14

Cuando corres

PATH=abc:$PATH echo $PATH

o, en el caso más general,

variable=value utility

entonces variablese establece en el entorno deutility(pero no en el entorno actual ).

Sin embargo, cuando se analiza su línea de comando, el valor de la variable PATHse toma del entorno actual .

Tendría que configurar la variable en el entorno donde se expande la variable. Puede hacer esto separándolo en dos pasos, como en

PATH=abc:$PATH; echo "$PATH"

que establecería PATHen el entorno actual y luego ejecutaría echo "$PATH", o establecería la variable para un shell secundario, como en

PATH=abc:$PATH sh -c 'echo "$PATH"'

que establecería la variable PATHdentro de sh -c, pero no en el shell actual.

En su segundo ejemplo,

PATH=/mybin:$PATH which python

la utilidad whichprobablemente dirá que pythonse encuentra en /mybinya que modifica PATHen su entorno. Observe cómo PATHnunca se expande en el entorno actual aquí, sino internamente por which.

Por cierto, which pythones mejor (más portátil )escritocommand -v python(ver " ¿Por qué no usar "cuál"? ¿Qué usar entonces? " ).


Solo una breve reflexión sobre su título,donde dices "ENVvariable". La variable ENV, incluso si esto no era lo que quería decir, resulta ser una variable de entorno que usan algunas implementaciones desh(y algunos otros shells ). Si su valor es el nombre de un archivo, ese archivo se obtendrá antes de iniciar una sesión de shell interactiva. bashtiene una variable BASH_ENVque funciona de la misma manera, pero para shells no -interactivos.

4
27.01.2020, 23:14

El motivo es que la expansión de echo $PATHocurre antes de que se cree el entorno modificado.

Puede llamar a:

PATH=abc:$PATH env

para ver que el entorno para el comando de hecho se modifica.

Desde la expansión del argumento echo en

PATH=abc:$PATH echo $PATH

ocurre antes de configurar el nuevo entorno, debe dividir las cosas en dos comandos:

(PATH=abc:$PATH; echo $PATH)

hace lo que te gusta. El subshell ()es necesario para evitar que el entorno cambie para sobrevivir a la vida útil del comando echo.

1
27.01.2020, 23:14

Теги

Похожие вопросы