私は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 -bash
、cp -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
もちろん、スクリプト内で割り当てを変更したり、実行前に変更したりすることもできます。