6

これはあまりにも一般的な質問かもしれませんが...シェルスクリプト内からディレクトリを移動しようとして困惑しています。私は *nix のパワー ユーザーではありませんが、ほとんどのタスクでコマンド ラインを使用することに慣れています。次のようなスクリプト プロセスだけでなく、'me' をディレクトリに移動できるスクリプトを呼び出したいと思います。

prompt:> goto lit   

where gotoはエイリアスです ->次のような単純なコードがありますgoto='./goscript'

goscript

cd /path to work dirs/lit/user dir  

(各ユーザーが /lit 内にディレクトリを持っていると仮定します)

私はこの問題を回避するために、個人のエイリアスを目的のディレクトリに移動し、スクリプトを実行してから元のディレクトリに戻るように設定しました。この質問は、同様の方法を使用する同僚によって私にもたらされましたが、必要なすべてのエイリアスを作成する必要がないように、プロセスをより一般的にしたいと考えていました。これは簡単に解決できる問題だと思っていましたが、まだシェル スクリプトの経験があまりないので困惑しています。

4

9 に答える 9

9

CDPATH他の人が説明したようにエイリアスを使用するよりも優れています。変数をチェックしてください! これは基本的に機能と同等ですが、 cdコマンドPATHに適用されます。

たとえば、 myCDPATHを として定義し、別のディレクトリ$CDPATH:${HOME}/subdirを含む場合、次のように単純に実行できます。~/subdirsubsubdir

cd subsubdir

任意のディレクトリから、期待どおりにパスをナビゲートします。

詳細は次のとおりです。

http://www.caliban.org/bash/#bashtips

変数を設定するには、次のようなCDPATH行を に追加します。.bashrc

export CDPATH=$CDPATH:${HOME}/subdir
于 2008-11-13T21:20:18.507 に答える
5

goto (または何でも) と呼ばれる関数を作成し、それが .bashrc で定義されていることを確認できます (または、現在のシェルから「ソース」にすることができます)。

function goto {
    #  the "$USER" part will expand to the current username
    # the "$1" will expand to the first argument to the function ("goto xyz" => $1 is "xyz")
    cd /some-path/lit/$USER/$1
}

これを ~/.bashrc または別のファイルに入れて、プロンプトから「source the-file」を呼び出すと、他のプログラムと同じように関数を呼び出すことができます。

prompt> goto folder
 cd /some-path/lit/your-user/folder
于 2008-11-13T21:11:09.650 に答える
4

プロンプトと同じ環境でスクリプトを実行するには、.

スクリプトに名前を付けたとします。

cd .. 

で呼び出す場合。あなたが得る:

$> pwd
$> /home/users/rd/proj
$> . up
$> pwd
$> /home/users/rd
于 2008-11-13T21:11:12.380 に答える
2

できません。スクリプトには環境の独自のコピーがあるため、ログイン シェルの環境を変更することはできません。

于 2008-11-13T21:06:20.860 に答える
1

私がこれを尋ねたとき、私はメンバーではなかったので(皮肉なことに、私の匿名のログイン質問は、公式のログイン質問を合わせたものよりも才能があります)、今は閉じることができません-しかし-The Remo D.etal。答えは、私たちが必要とした実用的なソリューションにつながったものです。modの力を持っている人がこれを閉じて、受け入れられた答えとしてそれを選択できるなら、私はそれを感謝します。

于 2009-01-26T03:49:49.893 に答える
0

bash スクリプトでは cd を使用できません。ただし、cd とパスに別名を付けることができます。

alias goto='cd /path_to_work/usr/dir'

更新: その行を .bashrc ファイルに入れてから実行します

source ~/.bashrc

エイリアスを作成します。

于 2008-11-13T21:07:36.600 に答える
0

エイリアスを使用して、このような簡単なことを実現できます。たとえば、ワークスペース環境に入れ、Makefile システムの変数を構成するいくつかのエイリアスがあります。これは、私が例として使用している実際のエイリアスです。'&&' は、コマンドの 1 つが失敗するまでコマンドを実行し続けます。このような単純なシナリオでは、失敗する可能性が低いため、クリーンアップは必要ありません。

alias main1='cd ~/code/main1 && export TOP=`pwd` && export DEBUG=1'

同僚の間でエイリアスの共有ライブラリを開発したい場合は、それらを NFS 経由で共有し、含めるファイルをソースすることができます。

于 2008-11-13T21:08:58.670 に答える
0

各スクリプトには、現在の作業ディレクトリに関する独自の概念があります。「cd」はプロセスではなく、シェルの組み込みです。

あなたが望むことをする方法は、エイリアスを作成することです。csh では次のようになります。

alias goto 'cd /path_to_work/\!*/user_dir'

sh/bash には同様のエイリアス機能があります

于 2008-11-13T21:09:57.653 に答える
0

私の .rc には、次のようなエイリアスが数十個ある傾向があります。

alias work='cd /home/foo/work'
alias rails='cd /home/foo/rails'
alias assets='cd /home/foo/rails/assets'

それがうまくいかない場合は、bash のデバッグ フックを使用して、実行前にコマンド ラインをその場で置き換えることができます (「goto」キーワードが行の最初にある場合)。これには、bash で 'trap' を検索する必要がありますが、そのような呪文はすべてのシステムで同じように動作するとは限らないことに注意してください。私は数ヶ月前にそのような経験を書きました.結果を歓迎します.

于 2008-11-13T21:13:25.620 に答える