Mac端末で実行されているこのbashファイルはディレクトリを変更できません。代わりに実際に存在していても不在を報告してください。私は何が間違っていましたか?
#!/usr/bin/env bash
set -e
read name
APPLICATION_PATH="~/Documents/meteor/apps/$name"
cd "${APPLICATION_PATH}"
ベストアンサー1
2つの点があります。
- チルダ拡張の問題
- 調達と実行の問題。
チルダ部分の場合、SuperUserの最近の質問は同じ問題に関するものです(https://superuser.com/questions/1161493/why-bash-script-wont-extend-bashrc/1161496#1161496)
チルダは変数の前に展開されるため、cd はパスを見つけることができません。この問題を克服するために、eval
コマンドは次のように指定できます。
eval cd "${APPLICATION_PATH}"
残念ながら、スクリプトを実行している場合(呼び出しパス「+ x」でchmodを指定した場合)、$ PWDが「現在のシェル」で変更されていないことがわかります。しかし、スクリプトの最後にこのような行を追加すると、
ls
ls
新しい作業ディレクトリで実行されていることがわかります。どうですか?
短い答え:調達は現在のシェルプロセスでコマンドを実行します。 Execute は新しいシェルプロセスでコマンドを実行します。まだ混乱していますか?長い答えを読んでください。
すぐに現在のシェルで$ PWDを変更するには、次のスクリプトを「インポートする」必要があります。
source /path/to/script
または
. /path/to/script
source
3番目のポイント:orを台無しにしたくない場合は.
〜/.bashrc(https://stackoverflow.com/questions/752525/run-bash-script-as-source-without-source-command):
エイリアス mycmd="source mycmd.sh"