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
答え2
ひどく醜いが効果的です。
function foo
echo bar;
end
setenv funcdefs (functions -n | perl -pe 's/,/\n/g' | while read d; functions $d; end|perl -pe 's/\n/\001/')
perl -e '$ENV{"funcdefs"}=~s/\001/\n/g;system ("fish", "-c", $ENV{funcdefs}."foo")'