単純な小さな「cd」はスクリプトでは機能しません。

単純な小さな「cd」はスクリプトでは機能しません。
#!/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

おすすめ記事