#!/bin/bash
#
echo $PWD
cd /home/<my username>/<long path>
echo $PWD
それを実行するときに得るものbash script.sh
:
/home/<my username>
: No such file or directorye/<my username>/<long path>
/home/<my username>
またはbash . script.sh
.: .: is a directory
/hom
最初のケースでは、何の理由もなくアドレス行()の最初の4文字をスキップしているようです。 2番目のケースでは正確には何ですか.: .:
?これは間違いなく「Googleでは利用できません」です。
この行を端末にコピーして貼り付けると、cd /home/<my username>/<long path>
ofcは正常に動作します。
編集:パスの末尾に空白記号が欠けていることに関するものです。ありがとうございます。
ベストアンサー1
あなたはする必要があります
スクリプトの「/home」部分の前に「隠し文字」があることを確認してください(これはCDに移動できない理由と、ディスプレイから一部が切り捨てられる理由を説明します)。例: cat -ve THEFILE #
-e
ワイヤの各端には、次のようなマークが表示されます。$
そして-v
フォームにいくつかの制御文字が表示されます。^x
、前任者:^M
制御文字「Enter」。修正:これを行うには、動作する例をシェルに入力し、マウスを使用してコピーし、スクリプトを編集し、行を削除し、コピーした内容をその場所に貼り付けます。 (viでは:スクリプトが説明とまったく同じでエラー行が4行の場合:次のようにして4行に移動できます。
4G
をタップしてその行を削除します。dd
を押し、上の行に挿入モードに入ります。O
(大文字o)。その後、マウスでコピーした行を貼り付けることができます。それからEscape
コマンドモードに戻って:wq
ファイルに変更を書き、viを終了します。$(pwd)出力を$ PWD値と比較できます。以下を変えてみてください。
echo $PWD
そして:pwd ; echo "PWD=$PWD"
ついに:
bash . script.sh
しなければならない:bash ./script.sh
。入力したコマンドを実行するには、bashが「.」を実行する必要があります。 「script.sh」と「。」引数をディレクトリとして使用すると、bashは文句を言いました。このように受け取った苦情は、通常、次の形式を取りますprogram_name: some message
。ここでbashはプログラムを実行しようとしているため、.
エラー.:
メッセージがプログラム名のヒントとして誤って使用されており、表示されたメッセージはプログラムを.: is a directory
実行できないこととその理由が何であるか(bashスクリプトではないディレクトリです)。この方法でscript.shを呼び出すと(bash ./script.sh)、現在のシェルに
bash
実行および終了するscript.sh
サブシェルを呼び出すように要求します。 bashサブシェルだけがPWDをエコーし、ディレクトリにcdして新しいPWDをエコーします。 Bashが終了すると、現在のシェルは元のディレクトリに残ります。現在のシェルでファイルを変更するには、代わりに次のように使用します。. ./script.sh
またはbashで可能ですsource ./script.sh
(注:.
これはファイルをインポートするより移植可能な方法です)つまり、. script.sh
可能ですが、次のようにローカルパスを指定することをお勧めします. ./script.sh
。