bashスクリプトCDディレクトリの入力

bashスクリプトCDディレクトリの入力

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新しい作業ディレクトリで実行されていることがわかります。どうですか?

答えはここにあります(https://superuser.com/questions/176783/what-is-the-difference-Between-executing-a-bash-script-and-commerce-a-bash-scrip#176788)

短い答え:調達は現在のシェルプロセスでコマンドを実行します。 Execute は新しいシェルプロセスでコマンドを実行します。まだ混乱していますか?長い答えを読んでください。

すぐに現在のシェルで$ PWDを変更するには、次のスクリプトを「インポートする」必要があります。

source /path/to/script

または

. /path/to/script

source3番目のポイント:orを台無しにしたくない場合は.〜/.bashrc(https://stackoverflow.com/questions/752525/run-bash-script-as-source-without-source-command):

エイリアス mycmd="source mycmd.sh"

おすすめ記事