GNU/Linux >> Linux の 問題 >  >> Linux

pwd は何を出力しますか?

ここでは、3 つの独立した「ディレクトリ」が機能しています。

<オール>
  • 現在のシェルの現在の作業ディレクトリ
  • シェル スクリプトの現在の作業ディレクトリ
  • シェル スクリプトを含むディレクトリ
  • それらが独立していることを示すために、/tmp/pwd.sh に保存されたシェル スクリプトを記述して、以下を含めることができます。

    #!/bin/sh
    pwd
    cd /var 
    pwd
    

    その後、pwd (上記の #1) を /:

    に変更できます。
    cd /
    

    スクリプトを実行します:

    /tmp/pwd.sh
    

    これは、既存の pwd のデモンストレーションから始まり (#1)、それを /var に変更して再度表示します (#2)。 pwd のどちらでもない は、/tmp/pwd.sh を含むディレクトリ「/tmp」でした (#3)。


    現在の (または現在の) 作業ディレクトリ

    <ブロック引用>

    シェル スクリプトのコマンド pwd は、シェル スクリプトが存在するディレクトリを返しますか?

    いいえ

    まず、定義上、シェル スクリプトやシェル コマンドは、0 から 255 までの数値の終了ステータス以外は何も返しません。

    次に、pwd Bourne シェルのビルトインであり、標準のシステム バイナリでもあります。どちらかが印刷 論理的または物理的な現在の作業ディレクトリ 、これは通常:

    <オール>
  • スクリプトまたはバイナリを呼び出すときのディレクトリ構造内の場所
  • cd で作業ディレクトリを変更した後の現在の場所 または、pushd や popd など、現在の作業ディレクトリを変更するその他のユーティリティやビルトイン
  • 現在のスクリプトのディレクトリが必要な場合は、dirname を使用します 以下の最後のセクションで説明されているユーティリティ。

    pwd のクイック テスト

    pwd を確認するための簡単なテストとして 実際に印刷するには、次を実行できます:

    # Create a shell script containing pwd.
    cat <<-EOF > /tmp/test_pwd.sh
    #!/bin/sh
    
    pwd
    EOF
    
    # Make the script executable.
    chmod 755 /tmp/test_pwd.sh
    
    # Go somewhere on the filesystem, and call the test script.
    cd /etc
    /tmp/test_pwd.sh
    

    これは /etc を出力します 、 /tmp ではありません 、現在の作業ディレクトリは現在 /etc であるため .これは予想される動作です。

    スクリプトを含むディレクトリの取得

    現在のスクリプトのディレクトリを見つけたいので、おそらくこの質問をしているでしょう。一般的なケースでは、以下が簡単な解決策です:

    #!/usr/bin/env bash
    echo $(dirname "$0")
    

    $0 のため、これは機能します 通常、実行中のスクリプトを呼び出すために使用されるパス名が含まれ、シェル展開では dirname が使用されます ファイル名部分を除いたパスを返すユーティリティ。 Bash パラメーター展開 "${0%/*}" を使用して、似たようなことを行うことができますが、移植性は低くなります。 .

    もちろん、これはすべて非常に単純化しすぎています。 Bash マニュアルをお読みください (特に、位置パラメータ、特殊パラメータ、および BASH_SOURCE に関するセクション) ) および readlink の man ページ と realpath いくつかあるエッジケースが何であるかをより完全に理解すること。

    ただし、日常のスクリプトでは、$0 のディレクトリ コンポーネントは 知りたいことを伝えるには十分です。 $0 で十分に複雑なことをしている場合 実際に必要な情報を保持しておらず、次のようなより複雑な構造が必要です:

    echo $(dirname "$(realpath "$0")")
    

    そうすれば、あなたの人生は必要以上に難しくなっているでしょう.


    pwd 現在の作業ディレクトリを開くことができない場合を除き、0 を返します。

    mkdir /tmp/d; cd "$_"
    pwd && pwd -P; echo "$?"
    rmdir ../d
    pwd && pwd -P; echo "$?"
    
    /tmp/d
    /tmp/d
    0
    /tmp/d
    pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
    1
    

    Linux
    1. 「lc_all=c」は何をしますか?

    2. 「ls-l」コマンドの出力でディレクトリのサイズは何を意味しますか?

    3. シンボリックリンクのないPwd?

    1. 何をしますか?

    2. Exec 3とは何ですか?

    3. Xevからのこの出力はどういう意味ですか?

    1. エコー$は何ですか?行う??

    2. Ls -al。*コマンドは何を返しますか?

    3. malloc(0) は何を返しますか?