bashで「終了」するときに最後の作業ディレクトリを保存することは可能ですか?次回のログイン時には、最後にログアウトしたときのディレクトリになります。Bashログアウト時に最後の作業ディレクトリを保存
答えて
保存隠しファイルに〜./ bash_logoutの最後の作業ディレクトリ:。
pwd > ~/.lastdirectory
があなたの~/.bashrc
に入れ
[ -s ~/.lastdirectory ] && cd `cat ~/.lastdirectory`
dir(cd)を変更するたびに、現在のディレクトリ(pwd)をファイルに書き込むことができます。ターミナルを起動するとき、bashスタートアップスクリプトはそのファイルの "last dir"を探します。何かが見つかった場合 - それにcdしてください。
.bashrcのを見て、おそらくあなたが興味を持っているディレクトリが含まれているために、ログアウト時にそれを変更することができるという。
あなたが最も可能性が高い時にシェルが終了ファイルに現在のディレクトリを保存しておきたいです。シェルの終了を検出するには、いくつかの方法があります。
- 〜/ .bash_logoutにいくつかのコードを入れてください。これは、ログインシェルが終了したときにのみ実行されるので、端末ウィンドウを閉じるだけであれば、ディレクトリは保存されません。
- EXITでトラップします。組み込み関数 "trap"を使うと、シェルが終了したときにいくつかのコードを実行させることができます。これはシェルが終了したときに実行されます - あなたがトラップを設定したシェル、つまり。
すべてのプロンプトで、または「cd」を実行するたびにCWDを保存できますが、それはちょっと残酷です。
次回のシェルの起動時にCWDを復元するには、保存ファイルの内容に「cd」を実行するだけです。
複数のシェルを同時に実行している場合、どうなるべきか考えてみてください。どちらのCWDを保存しますか? CWDを使用する新しいシェルがすべて使用されるべきですか?または、起動する次のシェルだけですか?
これを〜/ .bashrcの中に、このファイルを読む(おそらく最後に:
cd "$(<~/.storepwd)"
次に、次のいずれかを選択してください:
のどちらか(インタラクティブ非ログインシェル用のディレクトリを覚えていないだろう)~/.bash_logout
でこれを置く:
printf %s "$PWD" > ~/.storepwd
またはEXIT
にtrap
を使用し、あなたの~/.bashrc
でこれを置く(トラップが簡単/誤って上書きすることができます) :
trap 'printf %s "$PWD" > ~/.storepwd' EXIT
またはPROMPT_COMMAND
を使用するには、あなたの~/.bashrc
(おそらく最も信頼性の高い方法を)これを置く:
PROMPT_COMMAND+='; printf %s "$PWD" > ~/.storepwd'
また、~/.profile
または~/.bash_profile
のソースが~/.bashrc
であることを確認してください。そうしないと、ログインシェルの起動時にパスが復元されません。
ドットファイルの使用方法については、http://mywiki.wooledge.org/DotFilesを参照してください。
+1これは受け入れられた答えよりもはるかにbash固有です。 –
この概念全体にも注意する必要があります。たとえば、期待していないときにコードを実行すると、さまざまなことを混乱させる可能性があります。
たとえば、現在の作業ディレクトリを変更したシェルスクリプトを実行し、終了時にCWDを保存するように管理した場合、起動する次のシェルでは、ディレクトリあなたは期待していません。
少なくとも私の仕事では、root suがユーザーにスクリプトを実行するときにスクリプトが実行されるときに、それはすべて自動的に(つまりプログラムで)実行されます。あなた自身のユーザのためにこのCWDトリックをやっているなら、それは問題ありませんが、 "su - youruser -c ls"があなたのホームディレクトリのファイルを返すことを期待するシステムツールに大いに悩まされるかもしれません。 (あなたのユーザーが気まぐれなアイデアだから、 "ls"と呼んでください。しかし、rootよりも優れた環境があるかもしれません。例えば、ルートが押しつぶされたNFSマウントの場合)。
Soここで重要な点は、対話シェルであるかどうかを確認することです。そうでない場合は、はCWDを復元または保存しません。 IIRC、$ - には対話シェルがあります。トラップの設定とCWDの復元に使用します。
個人的に、私はちょうどエイリアス設定:
alias go='. go.sh'
をして、単に私が行きたいディレクトリのためにそのパラメータをチェックしgo.sh。例えば "go myproj"はcd〜/ svn/myproj、 "go bigdisk"はcd/mnt/bigdiskになります。もっと複雑な場合は、より多くのパラメータを取ることができます。たとえば、 "go myproj lib"は "cd〜/ svn/myproj/myproj/lib"などとなります。自動保存はありませんが、副作用はありません。
- 1. ウェブサイトログイン/ログアウト時間をExcelに保存
- 2. ログアウト時にセッションを保存する
- 3. ユーザーの最新のログアウトを保存
- 4. QSettings():現在の作業ディレクトリに保存する方法
- 5. Bashは最後にディレクトリを再帰的に作成します
- 6. bash - 作業ディレクトリの外部にファイルを格納する方法
- 7. TeamCityの依存関係の作業ディレクトリ?
- 8. Visual Studioプレビルドイベント/ビルド後のイベント作業ディレクトリ
- 9. 保存時にVIMに最後の改行を追加する
- 10. Vim:保存時に親ディレクトリを作成する
- 11. 今後の作業のリストを保持
- 12. 作業ディレクトリが存在しません
- 13. 最大実行時間1年の作業後のエラー
- 14. ファイルを保存する一時フォルダ/ディレクトリを作成するCocoa
- 15. 最後のデータをAQuery(コールバック)に保存
- 16. 作業ディレクトリ - ソリューション
- 17. 作業ディレクトリ
- 18. Matlab:パスに現在の作業ディレクトリを最優先に設定
- 19. 作業ディレクトリにSVNをエクスポート
- 20. bash:パス名の最後の2つのディレクトリを抽出する
- 21. バッチ作業での保存方法は?
- 22. 選択したディレクトリの保存操作後に電源をオフにします。
- 23. 起動時にOctave作業ディレクトリを変更するには?
- 24. 作業ディレクトリwin32ビジュアルスタジオ
- 25. Upstart node.js作業ディレクトリ
- 26. Proc :: Background使用時に作業ディレクトリを変更する
- 27. 純粋にbash正規表現を使用して作業ディレクトリを圧縮
- 28. リターンコードを保存し、bashの
- 29. 最後に最新のファイルをフォルダに保存する
- 30. matplotlibファイルをディレクトリに保存
拡張を適切に引用する場合は、テストは必要ありません。 – lhunath
これは、〜/ .bash_logout(〜と/の間にある〜)ではなく、〜/ .bash_logoutでなければなりませんか? – Gnubie