私はUbuntuを使用していて、インストールしようとしています this PythonパッケージをAnaconda経由で。リンクにある手順に従い、cp -Ri $THIS_DIR/PackageFiles/Scripts $CMDIR
と入力すると、 (59行目以降)、次のようになります。
cp: invalid option -- 'h'
理由は何ですか?どうすれば修正できますか?
編集:echo $THIS_DIR
とecho $CMDIR
の出力はそれぞれdirname -bash
と/home/myusername/cellmodeller
です。
いくつかのこと:THIS_DIR
にdirname -bash
が含まれている場合、cp -Ri $THIS_DIR/...
はcp -Ri dirname -bash/...
と同等に展開されます(単語分割のため)。つまり、cp
はdirname
と-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
に変更するか、実行する前に変更することもできます。