他のシェルからスクリプトコード(変数設定)を取得するには?

他のシェルからスクリプトコード(変数設定)を取得するには?

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スクリプトを入手してください)

おすすめ記事