예상되는 결과

예상되는 결과

Task.sh실행 권한이 있는 스크립트(예: )가 있습니다 .

의사코드:

if [[ Not called from inside a script ]]; then
  echo 'Not called from inside a script'
else
  echo 'Called from a script'
fi

Main.sh실행 권한이 있는 스크립트가 있습니다 .

Value=$(Task.sh)
echo "${Value}"

예상되는 결과

$ Task.sh
Not called from inside a script

$ Main.sh
Called from a script

도움 요청

의사 코드에 어떤 조건을 추가할지 제안해주세요Task.sh

답변1

한 가지 옵션은 요청을 "이것을 스크립트에서 실행하고 있습니까?" 도착하다"터미널이나 파이프/파일에 연결합니까?". 이렇게 하면 다음과 같은 상황이 허용됩니다 Task.sh >/tmp/file. 스크립트에서 호출되지 않지만 클립보드 대신 파일에 써야 하는 것처럼 보입니다.

이것이 허용된다면 간단한 테스트를 사용할 수 있습니다.표준 출력터미널에 연결:

if [ -t 1 ]
then
    echo "stdout is a terminal (tty)"
else
    echo "not a terminal (tty)"
fi

도구는 사용되는 상황에 따라 매우 유사한 방법을 사용하여 다르게 사용되고 작동됩니다 ls. tty예를 들어, 비교 ls하고ls | cat

답변2

도구를 사용하여 클립보드에 무언가를 복사하는 경우는 거의 없으므로 명시적으로 기술하고 요청이 있을 때만 수행하는 것이 가장 좋습니다.

따라서 한 가지 옵션은 스크립트가 클립보드를 사용해야 하는 명령줄 인수를 확인하고 그렇지 않으면 기본적으로 표준 출력으로 인쇄하는 것입니다.

스크립트에서 명령줄 인수를 사용하지 않는 경우 다음과 같이 간단합니다.

if [ "$1" = --clipboard ]; then
    copy_to_clipboard "$data" # or whatever
else
    printf "%s\n" "$data"     # print to stdout
fi

getopt또는 명령줄 인수를 사용하는 경우 해당 인수를 루프에 포함하세요.

즉, 대화형 사용자는 옵션을 추가하는 것을 기억해야 하지만 .bashrc해당 옵션에 별칭을 설치하거나 이에 상응하는 항목을 간단히 설치할 수 있습니다.

alias Task.sh="Task.sh --clipboard"

관련 정보