web-dev-qa-db-ja.com

cp:無効なオプション-'h '

私はUbuntuを使用していて、インストールしようとしています this PythonパッケージをAnaconda経由で。リンクにある手順に従い、cp -Ri $THIS_DIR/PackageFiles/Scripts $CMDIRと入力すると、 (59行目以降)、次のようになります。

cp: invalid option -- 'h'

理由は何ですか?どうすれば修正できますか?

編集:echo $THIS_DIRecho $CMDIRの出力はそれぞれdirname -bash/home/myusername/cellmodellerです。

1
Fabulini

いくつかのこと:THIS_DIRdirname -bashが含まれている場合、cp -Ri $THIS_DIR/...cp -Ri dirname -bash/...と同等に展開されます(単語分割のため)。つまり、cpdirname-bash/...を別個の引数として。 2つ目はダッシュで始まるため、その中の文字をオプションとして解釈しようとします。 GNU cpにはオプションとして-hがないため、エラーが発生します。

引用符で分割するのを防ぐことはできますが、スペースとすべてを含むdirname -bashというディレクトリがない可能性があるため、それほど意味はありません。

スクリプトを見ると、THIS_DIR

THIS_DIR="`dirname $0`"

バッククォートに注意してください。バッククォートはコマンド置換を開始し、dirnameコマンドを実行します。それらを削除すると、リテラル文字列dirname ...が割り当てられます。

ここでも、$0は実行中のシェルまたはスクリプトの名前です。スクリプトはおそらくそのコマンドを使用して、スクリプト自体がどこにあるかを見つけます。 /foo/barを実行した場合のパス/foo/bar/scriptname.sh。しかし、通常起動されるインタラクティブシェルでは、$0にはおそらくbashが含まれているだけであり、ログインシェルの場合は-bashが含まれています。

Cutrightjmがコメントで述べたように、そのスクリプトは、端末に個別にコピーされたコマンドとしてではなく、スクリプトとして実行されることを意図しています。 (それでも、展開の前後に引用符を使用できます。)

もちろん、スクリプトで割り当てをTHIS_DIRに変更するか、実行する前に変更することもできます。

2
ilkkachu