我尝试使用 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 脚本)