PerlからFish機能にアクセスする

PerlからFish機能にアクセスする

Bashでは、次のことができます。

foo() { echo bar; }
export -f foo
perl -e 'system "bash -c foo"'

関数定義にアクセスすることもできます。

perl -e 'print "foo".$ENV{"BASH_FUNC_foo%%"}'

で同じことをどのように実行できますかfish

編集する:

これにより、関数定義を得ることができます。

functions -n | perl -pe 's/,/\n/g' | while read d; functions $d; end

これをPerlがアクセスできる環境変数に入れることができる場合は、コマンドを実行する前に実行できる必要があります。次のようによく似ています。

setenv funcdefs (functions -n | perl -pe 's/,/\n/g' | while read d; functions $d; end)
perl -e 'system($ENV{"funcdefs"},"foo")'

しかし、設定ではfuncdefs改行文字を無視するようです。 $ENV{"funcdefs"} は非常に長い行です。

奇妙なことに、そうです。fish する改行を含む環境変数がサポートされています。

setenv newline 'foo
bar'
echo "$newline"

fishコマンドの出力を変数に入れますが、改行文字を保持することをお勧めできますか?

ベストアンサー1

あなたはfish使用することができます機能を保存Fishセッションに関数定義を保存します。

$ function qwerty
    echo qwerty
end
$ funcsave qwerty
$ fish -c qwerty
qwerty
$ perl -e 'system "fish -c qwerty"'
qwerty

おすすめ記事