現在の作業ディレクトリを単純に変更するスクリプトを実行したいと思います。
#!/bin/bash
cd web/www/project
しかし、実行後、現在のパスワードは変更されません!どうすればいいですか?
答え1
これは予想される動作です。スクリプトはサブシェルで実行され、親シェル作業ディレクトリを変更することはできません。終了すると効果が消えます。
現在のシェルのディレクトリを永久に変更するには、サブシェルではなく現在のシェル環境でスクリプトを実行するためにsource
単にエイリアスを付けたこのコマンドを使用する必要があります。.
次のコマンドは同じです。
. script
または
source script
答え2
このような小さな操作では、スクリプトを作成するのではなく、次のエイリアスを作成します。
$ alias cdproj='cd /dir/web/www/proj'
.bashrc
各対話型シェルに対してこれを設定するには、ファイルに追加する必要があります。
これで、次のように実行できます$ cdproj
。
答え3
exec bash
最後に使用した
Bash スクリプトは現在の環境または子環境で実行されますが、親環境では実行されません。
しかし、この質問は人々が望むのでよくある質問です。実行後、特定のディレクトリの bash プロンプトを保持します。別のディレクトリのbashスクリプト。
この場合、スクリプトの最後で子bashインスタンスを実行するだけです。
#!/usr/bin/env bash
cd desired/directory
exec bash
これにより、新しいサブシェルが作成されます。Ctrl+を入力するDか、exit
元のスクリプトを起動した最初のシェルに戻ります。
更新:$SHELL
最後に使用されました
少なくとも最新バージョンでは、bash
最後exec
の行はもう必要ありません。また、環境変数を使用して、好みのシェルで動作するようにスクリプトを作成することもできます$SHELL
。これにより、以下が提供されます。
#!/usr/bin/env bash
cd desired/directory
$SHELL
答え4
必要なものを正確に実行するいくつかの答えがありますが、この目的のためのより標準的な方法はシンボリックリンクを作成することです。
ln -s ~/web/www/project proj #use full path to dir!
cd
その後、名前を使用してディレクトリに移動できますproj
。
cd proj
この方法は、次のことを行わずに短い名前を使用してファイルにアクセスできるため、より柔軟ですcd
。
ls proj/ #note the endslash!
vim proj/file.x