シェルスクリプトは、ユーザーが実行しているディレクトリを知ることができますか?私はサブディレクトリのリストを見て、そこからいくつかの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
))を呼び出した後、その内容が変更されることがあります。popd
POSIXシェルは、$OLDPWD
呼び出しが成功する前の以前の作業ディレクトリを含む変数も保持しますcd
。pushd
popd
このpwd
コマンドは、現在のディレクトリのパスを印刷します。 POSIXシェルでは、このコマンドは通常組み込まれています$PWD
。
スクリプトの起動時に作業ディレクトリを知りたい場合は、次のようにスクリプトの先頭に書き込む必要があります。
#! /bin/sh -
original_PWD=$PWD
...
cd ...
親プロセスの現在の作業ディレクトリを知るために、GNU / Linuxでは次のことができます。
parent_PWD=$(readlink -ve "/proc/$PPID/cwd")
しかし、あなたはいつもこの情報にアクセスできるわけではありません。両親が帰ると、あなたはinit
収穫者(ある場合)に養子になるか養子になります。しかし、$PPID
そうです。いいえ更新されるので、この場合は間違ったプロセスのcwdを取得できます(親プロセスのpidが再利用されている場合)。
答え2
もちろん、スクリプトはそれを実行しているシェル/プログラムの現在のディレクトリを継承します。したがって、スクリプトcd
自体がそうしない限り、すべてのファイル名参照はそのファイル名に基づいています。スクリプトファイル自体の場所を知ることは難しく、ほとんど不可能です。
答え3
これを行う環境変数はないと思いますが、多くのコマンドなしで簡単に使用できるように自分で作成できます。
たとえば、
#!/bin/bash
starting_dir=$(pwd) #use pwd to get the starting directory
#do things
cd some_example_dir/
#do more things
cd $starting_dir #go back to the directory
この場合、起動ディレクトリのパスを変数に文字列として保存するだけです$starting_dir
。絶対パスとして保存され、cd
いつでもアクセスできます。