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