web-dev-qa-db-ja.com

シェルスクリプトディレクトリパスで$ 1を処理する

スクリプト(bash)のこの部分は最近まで完全に正常に機能していましたが、$ 1を使用してディレクトリパスを指定すると、ファイルが見つからないというエラーがスローされます。私が知っている唯一の違いは、rhel7にアップグレードした後に動作を停止したことです。

スクリプトの一部は次のとおりです。

MOUNTINST=/opt/mqm80_Inst1

$1/crtMQdir.ksh $MOUNTINST/bin 755 mqm
$1/crtMQdir.ksh $MOUNTINST/logs 755 mqm
$1/crtMQdir.ksh $MOUNTINST/Java/lib/soap 755 mqm

私は正しいディレクトリパスにいて、ファイルが存在することも確認しました。

   /var/mqm/trace/WMQUNX8000.02]
    $ ll *crt*
    -rwxr-xr-x. 1 mqm mqm 826 Apr 10  2014 crtMQdir.ksh

これが私が得るエラーです:

./test5.sh: line 4: /crtMQdir.ksh: No such file or directory
./test5.sh: line 6: /crtMQdir.ksh: No such file or directory
./test5.sh: line 8: /crtMQdir.ksh: No such file or directory

私は何かが足りないのですか?

1
MO12

_$1_はスクリプトの最初の引数であるため、必ずスクリプトの引数としてパスを指定してください。

パスとスクリプト名(スクリプトの完全なパス、たとえば_/path/to/crtMQdir.ksh_)が必要な場合は、代わりに_$0_を使用する必要があります。

また、kshスクリプトに実行権限があることを確認する必要があります:_chmod +x /path/to/crtMQdir.ksh_

別の方法として、現在のディレクトリから実行する場合は、現在のスクリプトで_$1_を_$PWD_に置き換えるだけです。このスクリプトと同じディレクトリを使用する場合は、_$1_の代わりに$(dirname $0)を使用することもできます。

1
olivierg