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

답변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")'

관련 정보