소스로의 리디렉션을 처리할 수 있나요?

소스로의 리디렉션을 처리할 수 있나요?

나는 명령에 의해 생성된 프로세스를 보고 싶다는 것을 알았습니다.이 답변이것이 바로 나에게 필요한 것 같습니다. 단, 스크립트가 자체 포함되기를 원하므로 파일을 가져오는 대신 프로세스 리디렉션을 사용하여 동적으로 생성할 수 있습니까? 예를 들어;

#!/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백그라운드 작업을 기다리는 중이지만 작업이 없습니다. 이러한 모든 일반 명령은 &포그라운드에서 실행되지 않고 시작되며, 쉘은 어쨌든 새 명령을 읽기 전에 해당 명령을 기다립니다.

관련 정보