bashスクリプトは、スクリプトを実行するディレクトリをユーザーに知らせることができますか?

bashスクリプトは、スクリプトを実行するディレクトリをユーザーに知らせることができますか?

シェルスクリプトは、ユーザーが実行しているディレクトリを知ることができますか?私はサブディレクトリのリストを見て、そこからいくつかのgitコマンドを実行するこのようなスクリプトを開発したいと思います。 1つの方法はこれを渡すことですが、pwdいくつかの追加パラメータが必要なので、組み込み関数を使用して作業ディレクトリをインポートしたいと思います。

この例では、現在のディレクトリを想定しています。

#!/bin/bash

for d in */ ; do
  echo ""
  echo "===================="
  echo ""
  echo "$d"

  git -C "$d" remote show origin
  echo ""
  echo "===================="
  echo ""
done

ベストアンサー1

POSIXシェル(例:)を実行し、POSIXシェルの特殊変数(サブプロセスから継承され、コマンド実行中に保存されるプロセス属性)bashに現在の作業ディレクトリへのパスを作成します。fish-like shell に$PWD該当するのは .csh$cwd

この変数は動的です。現在のディレクトリを変更するコマンド(またはcd(または一部のシェルでは/ pushd))を呼び出した後、その内容が変更されることがあります。popdPOSIXシェルは、$OLDPWD呼び出しが成功する前の以前の作業ディレクトリを含む変数も保持しますcdpushdpopd

このpwdコマンドは、現在のディレクトリのパスを印刷します。 POSIXシェルでは、このコマンドは通常組み込まれています$PWD

スクリプトの起動時に作業ディレクトリを知りたい場合は、次のようにスクリプトの先頭に書き込む必要があります。

#! /bin/sh -
original_PWD=$PWD
...
cd ...

親プロセスの現在の作業ディレクトリを知るために、GNU / Linuxでは次のことができます。

parent_PWD=$(readlink -ve "/proc/$PPID/cwd")

しかし、あなたはいつもこの情報にアクセスできるわけではありません。両親が帰ると、あなたはinit収穫者(ある場合)に養子になるか養子になります。しかし、$PPIDそうです。いいえ更新されるので、この場合は間違ったプロセスのcwdを取得できます(親プロセスのpidが再利用されている場合)。

おすすめ記事