GNU 파셋이 스크립트에서는 작동하지 않지만 터미널에서는 작동하지 않습니다.

GNU 파셋이 스크립트에서는 작동하지 않지만 터미널에서는 작동하지 않습니다.

이상한 문제가 발생했습니다. 이 예제를 실행 중입니다.https://www.gnu.org/software/parallel/parset.html. 하지만 스크립트 파일 내부에서는 작동하지 않습니다.

parset myarray seq 3 ::: 4 5 6
echo "${myarray[1]}"

스크립트 파일을 실행하면 다음 오류가 발생합니다.

Unknown option: myarray
Unknown option: seq
Unknown option: 3
Unknown option: :::
Unknown option: 4
Unknown option: 5
Unknown option: 6
parset only works if it is a function. The function is defined as part of env_parallel.    
Do the below and restart your shell.

하지만 터미널에서 직접 명령을 사용하면 작동합니다. 내가 여기서 뭘 잘못했나요?

답변1

즉, 오류 메시지에 표시된 대로 수행해야 합니다.

parset더 긴 버전: 첫 번째는 이라는 두 가지가 있습니다 .쉘 스크립트이 기능 버전을 활성화하는 방법을 알려주세요. 이것이 바로 이 스크립트의 전체 목적입니다.설정 지침함수 정의를 먼저 로드하지 않고 파셋을 실행하려는 경우(그리고 함수가 정의되면 스크립트보다 우선하므로 실행하면 parset스크립트 대신 함수가 실행됩니다)

두 번째는쉘 기능실제로 작업을 수행합니다(함수여야 하는 이유는 무엇입니까? 쉘에서 실행되는 함수는 자체 환경을 수정할 수 있는 반면 하위 프로세스는 상위 환경을 수정할 수 없기 때문입니다. 스크립트라면 상위 프로세스가 됩니다. 쉘이며 작업을 완료할 수 없습니다). 이 함수는 해당 함수가 사용되는 쉘에서 정의되어야 합니다.

함수를 정의하려면 env_parallel.$SHELL스크립트에서 정의한 함수를 사용하기 전에 스크립트의 소스 코드를 얻어야 합니다. 이 작업은 쉘에서 수행될 수 있습니다.로그인시작 스크립트(예 ~/.bash_profile: )가 있지만 비로그인 시작 스크립트(예: ~/.bashrc)에서는 작동하지 않기 때문에 터미널에서는 작동하지만 스크립트에서는 작동하지 않습니다.

즉, bash를 인터프리터로 사용하여 스크립트를 실행하고 env_parallel.*스크립트가 에 있는 경우 /usr/bin/스크립트 시작 부분에 다음을 추가합니다.

. /usr/bin/env_parallel.bash

중요한:스크립트를 실행 중인 인터프리터에 적합한 env_parallel.SHELL을 가져옵니다. 예를 들어 내 Debian 시스템에서는 parallel다음을 제공합니다.

$ ls -l /usr/bin/env_parallel*
-rwxr-xr-x 1 root root  4749 Aug 29  2021 /usr/bin/env_parallel
-rwxr-xr-x 1 root root 14565 Aug 29  2021 /usr/bin/env_parallel.ash
-rwxr-xr-x 1 root root 13565 Aug 29  2021 /usr/bin/env_parallel.bash
-rwxr-xr-x 1 root root  5377 Aug 29  2021 /usr/bin/env_parallel.csh
-rwxr-xr-x 1 root root 14554 Aug 29  2021 /usr/bin/env_parallel.dash
-rwxr-xr-x 1 root root  6643 Aug 29  2021 /usr/bin/env_parallel.fish
-rwxr-xr-x 1 root root 12595 Aug 29  2021 /usr/bin/env_parallel.ksh
-rwxr-xr-x 1 root root 12626 Aug 29  2021 /usr/bin/env_parallel.mksh
-rwxr-xr-x 1 root root 14754 Aug 29  2021 /usr/bin/env_parallel.sh
-rwxr-xr-x 1 root root  5380 Aug 29  2021 /usr/bin/env_parallel.tcsh
-rwxr-xr-x 1 root root 12604 Aug 29  2021 /usr/bin/env_parallel.zsh

또는 비로그인 셸 시작 스크립트(예 ~/.bashrc: ) 에 추가하면 parset비로그인 셸에서 실행되는 스크립트가 해당 기능을 사용할 수 있습니다.

man parset자세히보다.

관련 정보