タグ付けされた質問 「pwd」


3
ファイルシステムをナビゲートするときに、Unixはユーザーの作業ディレクトリをどのように追跡しますか?
UNIXシステムのシェルにログインして、コマンドをタップし始めたとします。最初はユーザーのホームディレクトリで開始します~。そこからcdディレクトリまで行くかもしれませんDocuments。 ここで作業ディレクトリを変更するコマンドは、直感的に理解するのが非常に簡単です:親ノードには、アクセスできる子ノードのリストがあり、おそらく(最適化された)検索のバリアントを使用して、子ノードの存在を見つけますユーザーが入力した名前を入力すると、作業ディレクトリがこれに合わせて「変更」されます。間違っている場合は修正してください。シェルが単純に「単純に」ユーザーの希望どおりにディレクトリへのアクセスを試行し、ファイルシステムが何らかのタイプのエラーを返すと、シェルはそれに応じて応答を表示する方が簡単かもしれません。 しかし、私が興味を持っているのは、ディレクトリ、つまり親、または親の親を上に移動するときに同じプロセスがどのように機能するかです。 私の未知の、おそらく「ブラインド」ロケーションを考えると、Documentsその名前のファイルシステムツリー全体にある可能性のある多くのディレクトリの1つで、Unixは次に配置する場所をどのように決定しますか?それを参照しpwdて調べますか?はいの場合pwd、現在のナビゲーション状態をどのように追跡しますか?
29 filesystems  pwd 


3
PS1 = '$(pwd)'これが機能する理由、およびPS1 = $(pwd)と異なる理由
このコマンドを入力すると、プロンプトがディレクトリに変わるのはなぜですか? PS1='$(pwd)' 私は一重引用符を使用しています。つまり、補間はありませんecho '$(pwd)'-→$(pwd) さらに、これがなぜ機能するのかを明確にしたとしましょう...なぜ機能が異なるのPS1=$(pwd)ですか?(引用符なし) 別の言い方をすれば、引用符を使用すると、ターミナルをナビゲートするときにプロンプ​​トが現在のディレクトリに変わり続けるということです。しかし、引用符を使用しない場合、プロンプトは常に、コマンドを最初に入力したときのディレクトリのままです。PS1=$(pwd) どうして?
18 bash  zsh  prompt  pwd 

7
ディレクトリツリー/ファイル名を使用する場合のコンパクトbashプロンプト
Ubuntu 14.04およびのシステムでは、次の内容で終わる変数bashがありPS1ます。 \u@\h:\w\$ プロンプトが次のように表示されるように user@machinename:/home/mydirectory$ ただし、現在のディレクトリに長い名前がある場合や、長い名前のディレクトリ内にあるため、プロンプトが次のようになる場合があります。 user@machinename:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name$ これは端末の行を埋め、カーソルは別の行に移動しますが、これは迷惑です。 代わりに次のようなものを取得したい user@machinename:/home/mydirectory1/...another_long_name$ PS1短いプロンプトを取得して、特定の文字数を超えないように、ディレクトリ名を「ラップ」および「コンパクト」にする変数を定義する方法はありますか?

2
pwdと/ bin / pwdの奇妙な違い
を使用して現在のディレクトリにシンボリックリンクを追加しましたln -s . aa。実行しcd aa、その後実行した場合pwd、応答はになり/home/sim/aaます。 しかし、実行する/bin/pwdと印刷されます/home/sim(現在のディレクトリは変更されていません)。 この違いはどこから来たのですか?
15 shell  symlink  pwd 

4
ディレクトリが削除されたときの「ls」エラー
2つのシェルを開いています。1つ目はディレクトリAにあります。2つ目では、ディレクトリAを削除してから再作成します。最初のシェルに戻って入力するlsと、出力は次のとおりです。 ls: cannot open directory .: Stale file handle どうして?最初のシェル(存在しないディレクトリ内で開いたままのシェル)は、次のコマンドを待つ間「フリーズ」し、ディレクトリが削除されて再作成されたことを「認識」しなかったと思いました。シェルは、文字列以外の現在の作業ディレクトリへの「より深い」参照を保持しています$PWDか?

2
pwdが--physicalのような長いオプションを受け入れないのはなぜですか?
pwdコマンドのマニュアルを表示すると、などの長いオプション--physicalがサポートされていると表示されます $ man pwd PWD(1) User Commands PWD(1) NAME pwd - print name of current/working directory SYNOPSIS pwd [OPTION]... DESCRIPTION Print the full filename of the current working directory. -L, --logical use PWD from environment, even if it contains symlinks -P, --physical avoid all symlinks ただし、次のように入力すると失敗します $ pwd --physical -bash: …
11 bash  rhel  pwd 

3
$ PWDを変更した後、bashでコマンドを実行するにはどうすればよいですか?
zshは、ユーザーがディレクトリを変更した後に関数を実行するためのものなど、いくつかの素晴らしいフック関数を提供しますchpwd。 # zsh only function greet() { echo 'hi'; } chpwd_functions+=("greet") cd .. # hi pushd # hi popd # hi 私はそれをbashでエミュレートしようとしています。 制約: インタラクティブシェルと非インタラクティブシェルの両方で機能する必要があります。つまり、次のようなものに依存することはできません $PROMPT_COMMAND cdディレクトリを変更する任意のコマンド(例:pushdおよびpopd)で機能させるため、再定義できません。 これは、実行する必要があります後ので、ユーザーの指示trap "my_function" DEBUG私は何とかそこに言うことができない限り、仕事は「最初の実行、ない$BASH_COMMAND、我々は閉じ込められ、その後もこれを行う...」私はの自動実行を回避できることがわかり$BASH_COMMAND 場合が extdebug有効になっていますそして、trap関数は1を返しますが、強制したくないと思います。成功した(ただし変更された)コマンドにextdebug戻るの1は間違っているようです。 最後の部分-「ユーザーのコマンドの後に実行」-は現在私が困惑しているものです。各コマンドの後に関数を実行できる場合は、前回チェックしてからディレクトリが変更されたかどうかをチェックすることができます。例えば: function check_pwd() { # true in a new shell (empty var) or after cd if [ "$LAST_CHECKED_DIR" != …
10 bash  hook  pwd 

1
$ PWDの語源
の語源は$PWD何ですか?頭字語ですか? pwd作業ディレクトリを出力するコマンドがあることは知ってい$CWDますが、シェル変数にはデータを出力するのではなくデータが含まれているため、現在の作業ディレクトリの変数に名前を付ける方が理にかなっています。
9 shell  history  pwd 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.