为什么 nohup sh -c "..." 不存储变量?
Why doesn't nohup sh -c "..." store variable?
为什么"nohup sh -c"不存储变量?
$ nohup sh -c "RU=ru" &
[1] 17042
[1]+ Done nohup sh -c "RU=ru"
$ echo ${RU}
$ RU=ru
$ echo ${RU}
ru
如何让它存储变量值以便我以后可以在循环中使用?
现在,当我使用 RU=ru
而不是我的 bash 循环时,它不会记录值,即
nohup sh -c "RU=ru; for file in *.${RU}-en.${RU}; do some_command ${RU}.txt; done" &
它在 sh -c "..."
中也不起作用,cat nohup.out 不为 echo
输出任何内容:
$ nohup sh -c "FR=fr; echo ${FR}" &
[1] 17999
[1]+ Done nohup sh -c "FR=fr; echo ${FR}"
$ cat nohup.out
Why doesn't "nohup sh -c" stores variable?
环境变量只存在于进程中,并且可能是进程的子进程。当您 运行 sh -c
时,您正在创建一个新的子进程。该子进程中的任何环境变量都不能 "move up" 到父进程。这就是 shells 和环境变量的工作原理。
It doesn't work within the sh -c "..." too, cat nohup.out outputs
nothing for the echo"
这是因为您使用了双引号。当您使用双引号时,shell 在 运行 命令 之前进行变量扩展 。如果切换到单引号,变量将不会扩展,直到 shell 命令 运行s:
nohup sh -c 'FR=fr; echo ${FR}'
为什么"nohup sh -c"不存储变量?
$ nohup sh -c "RU=ru" &
[1] 17042
[1]+ Done nohup sh -c "RU=ru"
$ echo ${RU}
$ RU=ru
$ echo ${RU}
ru
如何让它存储变量值以便我以后可以在循环中使用?
现在,当我使用 RU=ru
而不是我的 bash 循环时,它不会记录值,即
nohup sh -c "RU=ru; for file in *.${RU}-en.${RU}; do some_command ${RU}.txt; done" &
它在 sh -c "..."
中也不起作用,cat nohup.out 不为 echo
输出任何内容:
$ nohup sh -c "FR=fr; echo ${FR}" &
[1] 17999
[1]+ Done nohup sh -c "FR=fr; echo ${FR}"
$ cat nohup.out
Why doesn't "nohup sh -c" stores variable?
环境变量只存在于进程中,并且可能是进程的子进程。当您 运行 sh -c
时,您正在创建一个新的子进程。该子进程中的任何环境变量都不能 "move up" 到父进程。这就是 shells 和环境变量的工作原理。
It doesn't work within the sh -c "..." too, cat nohup.out outputs nothing for the echo"
这是因为您使用了双引号。当您使用双引号时,shell 在 运行 命令 之前进行变量扩展 。如果切换到单引号,变量将不会扩展,直到 shell 命令 运行s:
nohup sh -c 'FR=fr; echo ${FR}'