シェルは現在実行中のスクリプトの絶対パスを取得する
1. pwdコマンド
pwdコマンドを使って、現在実行中のスクリプトの絶対パスを取得できるかどうか見てみましょう。コマンドは "print name of current/working directory" で、これは本当に現在の作業ディレクトリを意味し、スクリプトが実行されているディレクトリを意味するものではありません。
xiaosi@Qunar:~/company/sh$ cat pwd.sh
echo `pwd`
xiaosi@Qunar:~/company/sh$ sh pwd.sh
/home/xiaosi/company/sh
xiaosi@Qunar:~/company/sh$ cd .
xiaosi@Qunar:~/company$ sh sh/pwd.sh
/home/xiaosi/company
pwd.sh スクリプトは echo `pwd` という一行だけです。このスクリプトを別のパスで実行すると、sh pwd.sh は /home/xiaosi/company/sh を取得しますが、sh sh/pwd.sh は /home/xiaosi/company を取得するので、pwd コマンドはスクリプトが実行されるディレクトリを取得しないことを意味します。
2. $0
シェルの初期化時に設定されます。bashがコマンドのファイルとともに起動された場合、$0にそのファイル名が設定されます。bashが-cオプション付きで起動された場合、実行する文字列の後の最初の引数が存在すれば、$0が設定されます。それ以外の場合は、引数0で与えられた、bashの起動に使用されたファイル名が設定されます。
この$0の値は、起動の仕方に関係します。
(1) ファイルを指定してbashを呼び出した場合、$0の値はファイル名となる
xiaosi@Qunar:~/company/sh$ cat pwd.sh
echo $0
xiaosi@Qunar:~/company/sh$ sh pwd.sh
pwd.sh
(2) -cオプションをつけてbashを起動すると、実際のコマンドは文字列から読み込まれ、文字列に他の引数がある場合は$0で始まる特別な変数参照が続きます(もうパスとは関係ありません)。
(3) これに加えて、$0にはbashが起動されたファイル名がセットされる(絶対パスとは書いていない)。
3. 正しい解答
basepath=$(cd `dirname $0`; pwd)
dirname $0, 現在実行中のスクリプトファイルの親ディレクトリを取得します。
cd `dirname $0`, このディレクトリに入る (現在の作業ディレクトリを変更する)
pwd, 現在の作業ディレクトリを表示する(cd実行後)
現在実行中のスクリプトの絶対パスを取得するShellについては、この記事がすべてです。スクリプトの絶対パスを取得するShellについては、Script Houseの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
シェルにおける括弧、中括弧、中括弧の違いについて
-
Linuxシェルセレクトメニュー選択実装コード
-
シェルスクリプトが繰り返し実行される問題の解決方法
-
シェル特殊変数(シェル $#, $*, $@, $? , $$)の使用について
-
シェルのPATH変数の使用方法について
-
Rsyncはすべてのバックアップツールを殺す、あなたは手動で特定のディレクトリをブロックすることができますか?
-
シェルでsedコマンドを使用して特定の行を削除する方法
-
Linux bashのバウンスシェルの原理を簡単に解析してみた
-
ディスク監視システム導入のためのシェルスクリプト
-
XshellとXftpの無料ダウンロードとインストールと手順(グラフィック)