나는 명령에 의해 생성된 프로세스를 보고 싶다는 것을 알았습니다.이 답변이것이 바로 나에게 필요한 것 같습니다. 단, 스크립트가 자체 포함되기를 원하므로 파일을 가져오는 대신 프로세스 리디렉션을 사용하여 동적으로 생성할 수 있습니까? 예를 들어;
#!/usr/bin/env bash
tasklist="(
command1
if abc; then
command2
elif
command3
fi
command4
)"
source < <(echo "$tasklist") ; wait
나는 cat
그것을 테스트하고 이후에 bash
작동합니다.
#!/usr/bin/env bash
tasklist="(
echo "command1"
echo "command2"
echo "command3"
)"
bash < <(echo "$tasklist")
source
그러나 나는 그것을 할 자신이 없었습니다. 예전에 안 좋은 경험을 한 적이 있어요. :/
감사해요.
답변1
어쨌든 Bash 4.4 이상에서 작동하며 다음을 인쇄 hi
합니다 hello
.
cmds='echo hi; var=hello'
source <(echo "$cmds")
echo $var
source <(...)
대신 이미 제공된 파일 이름을 process source < <(...)
로 바꿔야 합니다 . source
리디렉션이 필요하지 않습니다.
그러나 이러한 명령을 변수에 넣으면 직접 실행할 수 있습니다 eval "$cmds"
. 또는 명령이 고정된 경우 중간 변수에 대해 걱정하지 않고 직접 실행하십시오.
echo hi; var=hello
echo $var
wait
어쨌든, 나는 당신이 거기서 무엇을 하려는지 잘 모르겠습니다 . wait
백그라운드 작업을 기다리는 중이지만 작업이 없습니다. 이러한 모든 일반 명령은 &
포그라운드에서 실행되지 않고 시작되며, 쉘은 어쨌든 새 명령을 읽기 전에 해당 명령을 기다립니다.