exec bash最後に使用した

exec bash最後に使用した

現在の作業ディレクトリを単純に変更するスクリプトを実行したいと思います。

#!/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

関連情報