如何从另一个 shell 获取脚本代码(设置变量)?

如何从另一个 shell 获取脚本代码(设置变量)?

我尝试使用 FreeBSD。 FreeBSD用户默认root使用。csh

user@freebsd-13:~ $ echo $SHELL
/bin/csh

我知道通过设置变量$()csh.

root@freebsd-13:~ # export test=$(echo hello3)
Illegal variable name.

我想做那样的事情

root@freebsd-13:~ # sh -c "export test=$(echo hello3)"
Illegal variable name.
root@freebsd-13:~ #

它也不起作用...但是,这是有效的:

root@freebsd-13:~ # sh -c "echo "hello""
hello

或者这也有效,但在以下范围内sh

root@freebsd-13:~ # sh
# export test=$(echo hello3)
# echo $test
hello3
# exit
root@freebsd-13:~ # echo $test
test: Undefined variable.
root@freebsd-13:~ #

另一种尝试通过以下方式设置变量sh

root@freebsd-13:~ # sh -c "export test=`echo hello5`"
root@freebsd-13:~ # echo $test
test: Undefined variable.
root@freebsd-13:~ # sh -c "echo "$test""
test: Undefined variable.
root@freebsd-13:~ #
root@freebsd-13:~ # /bin/sh -c "export test=`echo hello3`"
root@freebsd-13:~ # echo $test
test: Undefined variable.
root@freebsd-13:~ # /bin/sh -c "echo "$test""
test: Undefined variable.
root@freebsd-13:~ #

尝试获取它的来源:

root@freebsd-13:~ # . sh -c "export test=$(echo hello3)"
Illegal variable name.
root@freebsd-13:~ #
root@freebsd-13:~ # . sh -c "export test=`echo hello3`"
.: Command not found.
root@freebsd-13:~ #
root@freebsd-13:~ # source sh -c "export test=`echo hello3`"
sh: No such file or directory.
root@freebsd-13:~ #
root@freebsd-13:~ # source /bin/sh -c "export test=`echo hello3`"
Unmatched '"'.
root@freebsd-13:~ # source /bin/sh -c "export test=$(echo hello3)"
Illegal variable name.
root@freebsd-13:~ #
root@freebsd-13:~ # source /bin/sh -c "export test="$(echo hello3)""
Illegal variable name.
root@freebsd-13:~ #

应该如何正确进行呢?

答案1

好的,我正在回答我的问题。
首先,该source命令仅用于文件。
如果我想按照我描述的方式运行代码,我需要使用eval.
这里有一个非常清楚的解释:
如何获取一些 shell 代码而不是文件?

我理解的关键点是,在采购时,shebang 行被忽略,因为文件没有被执行:只有它的内容被执行。

因此,这里的问题是要导出变量,我需要在当前 shell 中运行它。当前的 shell 在采购时会忽略任何 shebangs,此外,如果我运行sh -c- 我会在子 shell 中运行代码。

csh不支持sh语法。因此,在使用时导出变量的唯一可能的方法csh是使用其语法。

root@freebsd-13:~ # setenv test `echo "hello world"`
root@freebsd-13:~ # echo $test
hello world

还有一些其他解决方法与此处描述的类似:https://stackoverflow.com/questions/2710790/how-to-source-a-csh-script-in-bash-to-set-the-environment

(但我需要反之亦然 - 在 csh 环境中获取 bash 脚本)

相关内容