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より長いバージョン:最初のものは2つあります。シェルスクリプトこの機能バージョンを有効にする方法を教えてください。これがこのスクリプトの完全な目的です。設定手順関数定義を最初にロードせずにファセットを実行したい場合(そして関数が定義されている場合はスクリプトよりも優先されるので、実行するとスクリプトの代わり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詳細より。

関連情報