スクリプトを実行して、現在の作業ディレクトリを変更するだけです。
#!/bin/bash
cd web/www/project
しかし、実行した後、現在のパスワードは変更されません。どうやってやるの?
これは予想される動作であり、すでに何度か議論されています。
スクリプトはサブシェルで実行され、親シェルの作業ディレクトリを変更することはできません。終了するとその効果は失われます。
ディレクトリを永続的に変更するには、次のようにsourceスクリプトを実行する必要があります
. ./script
このような小さなタスクでは、スクリプトを作成する代わりに、次のようなエイリアスを作成します。
$ alias cdproj='cd /dir/web/www/proj'
すべてのインタラクティブシェルに設定する場合は、.bashrc
ファイルに追加する必要があります。
これを$ cdproj
として実行できます。
exec bash
最後にBashスクリプトは、現在の環境またはその子の環境で動作しますが、親の環境では動作しません。
ただし、この質問は、別のディレクトリからのbashスクリプトを実行後、特定のディレクトリのbashプロンプトに残したいので、よく聞かれます。
この場合は、スクリプトの最後で子bashインスタンスを実行するだけです。
#!/usr/bin/env bash
cd desired/directory
exec bash
これにより、新しいサブシェルが作成されます。 exit
と入力して、スクリプトが最初に開始された最初のシェルに戻ります。
あなたが望む正確な行動をする答えがありますが、そのような目的のためのより標準的な方法はシンボリックリンクを作成することです:
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
何をしようとしているのかに応じて、スクリプトの代わりに関数を作成することもできます。
例:
ファイルに関数を作成します。たとえば、/home/aidin/my-cd-script
:
function my-cd() {
cd /to/my/path
}
次に、それをbashrc
またはzshrc
ファイルに含めます。
# Somewhere in rc file
source /home/aidin/my-cd-script
これで、コマンドのように使用できます。
$ my-cd
ファイルシステムで遠く離れたディレクトリ間で変更した場合。 autojump をお勧めします。
PWD
に書き込み、スクリプト内でエクスポートするだけで、変更が持続します。
export PWD=/your/desired/directory
私にとって最も便利で柔軟なアプローチは、エイリアスとスクリプトの混合でした。
ここでは、ディレクトリに変更して適切なpython環境をアクティブ化するスクリプトを作成します。スクリプトの場所は/path/to/workon_myproj.sh
の例です。
#!/usr/bin/env bash
cd $HOME/workspace/myproj
source .venv/bin/activate
alias workon_myproj='source /path/to/workon_myproj.sh'
エイリアス定義を適切なシェル開始ファイルに追加します。 .profile
、.bashrc
または.zshrc
。
シェルでworkon_myproj
を実行するだけで、目的のディレクトリにあるスクリプトのコンテンツを取得できます。
スクリプトを改善して引数を取り、特定の作業ディレクトリ内の複数のプロジェクトで動作するようにしたり、git pull
と組み合わせて最新の変更をすぐに取得したりすることができます...すべてのボイラープレートはあなたのものです特定のプロジェクトで作業を続けるときに行います。
"exec"を使用しないのはなぜですか。
#!/bin/bash
cd someplace
exec bash
~/someplace