为什么没有" 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
答案 0 :(得分:3)
为什么没有" nohup sh -c"存储变量?
环境变量只存在于进程中,并且可能是进程的子进程。当您运行sh -c
时,您正在创建一个新的子进程。该子进程中的任何环境变量都不能向上移动"到父进程。这就是shell和环境变量的工作原理。
它并没有在sh -c" ..." cat nohup.out输出 什么都没有回声"
原因是您使用的是双引号。当您使用双引号时,shell会在运行命令之前执行变量扩展。如果切换到单引号,变量将不会展开,直到shell命令运行:
nohup sh -c 'FR=fr; echo ${FR}'