datetimeを取得し、このディレクトリにディレクトリcd
を作成します。cdコマンドはbashスクリプト内では機能しません
これは私のbashスクリプトです:
t=$(date +%F-%H%M%S)
mkdir $t
cd $t
が、それは完全には動作しません。
ディレクトリを作成しますが、cd
コマンドは機能しません。
スクリーンショット:
datetimeを取得し、このディレクトリにディレクトリcd
を作成します。cdコマンドはbashスクリプト内では機能しません
これは私のbashスクリプトです:
t=$(date +%F-%H%M%S)
mkdir $t
cd $t
が、それは完全には動作しません。
ディレクトリを作成しますが、cd
コマンドは機能しません。
スクリーンショット:
あなたはサブシェルでスクリプトを実行しています。
スクリプト内でcd
を実行する際の問題は、そのディレクトリから始まるサブシェルを作成することです。スクリプトが終了すると、あなたのサブシェルも同じようになり、スクリプトを実行したときにどこに戻ります。それはこのように書きます:
の場合、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
これはスクリプトの実行方法によって異なります。ソースを 'source'すると、現在のシェルが使用され、スクリプトが終了した後、新しく作成されたディレクトリに置かれます。 –
@DawidFerenczy OPのスクリーンショットを見て、彼らは 'sh 'でそれを実行しています –
あなたは実際に質問をして答えました。しかし二重引用符を使うべきです。シェルスクリプトをrootとしてテストするHesは、あまりにも注意することはできません。 – Argonauts
それは「それは働いていない」とは何を意味するのでしょうか?それは完璧に動作します。助けが必要な場合は、実際にどのように動作するかを記述します。 「うまくいきません」とはナンセンスです。 –
最後の行 "cd"コマンドは動作しません。このスクリプトを実行する前に、ホームフォルダ "〜"にあり、このスクリプトをホームフォルダでも実行してください。 – KBKai
再度。それは完璧に動作しています。実際にどのように動作するか(エラーメッセージなど)を記述しない限り、誰もあなたを助けることはできません。私が書いたように、「うまくいきません」というのは雄弁です。 –