2016-05-18 27 views
0

datetimeを取得し、このディレクトリにディレクトリcdを作成します。cdコマンドはbashスクリプト内では機能しません

これは私のbashスクリプトです:

t=$(date +%F-%H%M%S) 
mkdir $t 
cd $t 

が、それは完全には動作しません。

ディレクトリを作成しますが、cdコマンドは機能しません。

スクリーンショット:

screenshot of command prompt

+1

それは「それは働いていない」とは何を意味するのでしょうか?それは完璧に動作します。助けが必要な場合は、実際にどのように動作するかを記述します。 「うまくいきません」とはナンセンスです。 –

+0

最後の行 "cd"コマンドは動作しません。このスクリプトを実行する前に、ホームフォルダ "〜"にあり、このスクリプトをホームフォルダでも実行してください。 – KBKai

+1

再度。それは完璧に動作しています。実際にどのように動作するか(エラーメッセージなど)を記述しない限り、誰もあなたを助けることはできません。私が書いたように、「うまくいきません」というのは雄弁です。 –

答えて

0

あなたはサブシェルでスクリプトを実行しています。

スクリプト内でcdを実行する際の問題は、そのディレクトリから始まるサブシェルを作成することです。スクリプトが終了すると、あなたのサブシェルも同じようになり、スクリプトを実行したときにどこに戻ります。それはこのように書きます:

  1. 起動スクリプト
  2. サブシェルが
  3. ディレクトリに移動
  4. 変更を作成
  5. 終了スクリプト
  6. エンドがバックポイント
  7. を開始する
  8. をサブシェル作成されます

の場合、cdがスクリプト内で動作し、マークを残してスクリプトを実行している間にそのディレクトリ内にいることがわかります。

t=$(date +%F-%H%M%S) 
mkdir $t 
cd $t 
echo "I'm here" > inside.txt 

スクリプトが終了すると、スクリプトを開始した場所に戻ります。ディレクトリにcdがあり、lsを実行すると、作成したファイルが表示されます。などの代わりにサブシェルを実行しているのあなたの現在のシェルに


@Dawid Ferenczyが指摘するように、あなたがすることができ、実際にsourceこのスクリプト:

source test.sh 
+0

これはスクリプトの実行方法によって異なります。ソースを 'source'すると、現在のシェルが使用され、スクリプトが終了した後、新しく作成されたディレクトリに置かれます。 –

+0

@DawidFerenczy OPのスクリーンショットを見て、彼らは 'sh 'でそれを実行しています –

+0

あなたは実際に質問をして答えました。しかし二重引用符を使うべきです。シェルスクリプトをrootとしてテストするHesは、あまりにも注意することはできません。 – Argonauts

関連する問題