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

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

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

cp: invalid option -- 'h'

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

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

答え1

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

dirname -bash引用符を使用して分割を防ぐこともできますが、スペースを含むディレクトリ名がおそらく存在しないため、あまり意味がありません。

スクリプトを見るとTHIS_DIR

THIS_DIR="`dirname $0`"

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

また、 は$0実行中のシェルまたはスクリプトの名前です。スクリプトはおそらくそのコマンドを使用して、スクリプト自体がどこにあるのかを調べます (/foo/barを実行した場合のパスなど/foo/bar/scriptname.sh)。ただし、通常起動された対話型シェルには$0だけが含まれる可能性がありbash-bashログイン シェルの場合は が含まれます。

cutrightjm がコメントで述べたように、そのスクリプトは、ターミナルに個別にコピーされたコマンドとしてではなく、スクリプトとして実行されることを目的としています。(展開を引用符で囲むこともできます。)

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

関連情報