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"