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
。
ファイルの代わりにシェルコードをどのように取得できますか?
私が理解しているのは、ソーシング時にファイルが実行されないため、shebang行が無視され、その内容だけが実行されることです。
ここでの問題は、変数をエクスポートするには現在のシェルで実行する必要があることです。現在のシェルはソーシング時にすべてのシャバンを無視し、追加で実行してもサブシェルsh -c
でコードを実行します。
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スクリプトを入手してください)