1. 程式人生 > >shell 中獲取當前工作路徑和命令檔案所在絕對路徑

shell 中獲取當前工作路徑和命令檔案所在絕對路徑

常見的一種誤區,是使用 pwd 命令,該命令的作用是“print name of current/working directory”,這才是此命令的真實含義,當前的工作目錄,這裡沒有任何意思說明,這個目錄就是指令碼存放的目錄。所以,這是不對的。你可以試試 bash shell/a.sh,a.sh 內容是 pwd,你會發現,顯示的是執行命令的路徑 /home/june,並不是 a.sh 所在路徑:/home/june/shell/a.sh

  另一個誤人子弟的答案,是 $0,這個也是不對的,這個$0是Bash環境下的特殊變數,其真實含義是:

   Expands to the name of the shell or shell script. This is set at shell initialization.  If bash is invoked with a file of commands, $0 is set to the name of that file. If bash is started with the -c option, then $0 is set to the first argument after the string to be executed, if one is present. Otherwise, it is set to the file name used to invoke bash, as given by argument zero.

   這個$0有可能是好幾種值,跟呼叫的方式有關係:

  • 使用一個檔案呼叫bash,那$0的值,是那個檔案的名字(沒說是絕對路徑噢)

  • 使用-c選項啟動bash的話,真正執行的命令會從一個字串中讀取,字串後面如果還有別的引數的話,使用從$0開始的特殊變數引用(跟路徑無關了)

  • 除此以外,$0會被設定成呼叫bash的那個檔案的名字(沒說是絕對路徑)

下面對比下正確答案:

basepath=$(cd `dirname $0`; pwd)

在此解釋下basepath :

dirname $0,取得當前執行的指令碼檔案的父目錄

cd `dirname $0`,進入這個目錄(切換當前工作目錄)

pwd,顯示當前工作目錄(cd執行後的)

由此,我們獲得了當前正在執行的指令碼的存放路徑。

相關推薦

shell 獲取當前工作路徑命令檔案所在絕對路徑

常見的一種誤區,是使用 pwd 命令,該命令的作用是“print name of current/working directory”,這才是此命令的真實含義,當前的工作目錄,這裡沒有任何意思說明,這個目錄就是指令碼存放的目錄。所以,這是不對的。你可以試試 bash shell/a.sh,a.sh 內容

python3 獲取一個本地目錄下所有檔案絕對路徑

程式碼如下: import os def get_abs_paths(directory, totalPathFiles=[]):     '''     此函式旨在獲取directory目錄下,所有檔案的絕對路徑,     並放在to

VC++6.0 MFC獲取當前工作路徑可執行檔案路徑

1. 獲取Debug或Release所在的路徑 CString GetModuleDir() { HMODULE module = GetModuleHandle(0); char pFileName[MAX_PATH]; GetModuleFileName(mod

C++設定獲取當前工作路徑

通常,你在服務程式中呼叫DLL,而DLL又會載入許多配置和檔案,一般會出現DLL載入不到配置和檔案,原因是你的服務程式被載入後,路徑並不是你程式的所在目錄,故DLL也不是,因此載入不了。解決辦法,是在DLL的路徑或服務程式中設計當前的工作路徑。 主要函式為:SetCurre

jquery獲取相鄰元素相關的命令:next()、prev()siblings()

cnblogs lin Language javascrip prev round blog scrip color jquery裏我們要獲取某個元素的相鄰元素時,可以用到的命令有三個: next():用來獲取下一個同輩元素。 prev():用來獲取上一個同輩元素。 sib

MVC 在action方法獲取當前action的控制器名action名

ted col 控制 name pre value values class context 如何在某個action方法中獲取它所在的控制器和action名稱呢。 string controllerName = Request.RequestContext.RouteDa

CentOS 7.4 shell 不顯示當前用戶路徑的問題

export art 文件 自己 刪除 nbsp file centos .net 步驟如下: vim ~/.bash_profile (不用管.bash_profile這個文件有幾個,自己新建一個也是可以的) 在最後加上 export PS1=‘[\u@\h \

shell腳本獲取當前所在目錄地址

code 地址 color 腳本 AS pan 當前 clas 所在 shell腳本中獲取當前所在目錄如下 #!/bin/bash work_path=$(dirname $0) cd ${work_path} work_path=$(pwd) cd

Linux Shell指令碼獲取當前路徑

shell指令碼獲取當前路徑 #方法一 #!/usr/bin/env bash Cur_Dir=$(pwd) echo $Cur_Dir #方法二 #!/usr/bin/env bash basedir=cd $(dirname $0); pwd

windows 批處理命令獲取當前碟符當前目錄

批處理命令獲取當前碟符和當前目錄 %~d0 是當前碟符 %cd% 是當前目錄 可以用echo %cd%進行列印測試 以下例子是命令列編譯Visual Studio編寫的程式: @echo off set b=%cd% //將當前目錄儲存到引數b中,等號前後不要有空格 C: cd program

C++檔案操作-獲取當前工作路徑的方法

1.採用GetCurrentDirectory,用於獲取當前程序的當前目錄 2.getcwd獲取當前工作目錄,類似上一方法 #include  <direct.h>   #include  <stdio.h>    c

linux C語言獲取當前可執行程式的路徑及檔名 vs 獲取當前工作路徑

 獲取當前工作路徑: 標頭檔案:#include <unistd.h> 定義函式:char * getcwd(char * buf, size_t size); 函式說明:getcwd()會將當前的工作目錄絕對路徑複製到引數buf 所指的記憶體空間,引數size

python-獲取當前工作路徑

sys.argv[0] import sys print sys.argv[0]#獲得的是當前執行指令碼的位置(若在命令列執行的該命令,則為空) 執行結果(在python指令碼中執行的結果):

分享java程式設計一個小程式:獲取當前系統日期時間在小程式顯示出來

特別注意月份是從0開始而不是從1開始,所以需要在月份上加1import java.applet.Applet; import java.awt.TextArea; import java.util.C

如何在jsp頁面呼叫的java類獲取當前執行緒的requestsession

當在jsp頁面中呼叫的java類進行資料的處理,查庫操作,然後需要操作session的時候可以這樣獲取到當前執行緒的session。HttpServletRequest request = ((Ser

Unicode下 獲取當前工作路徑並存入char*

用VS2010開發時,在開發目錄下建立了個資料夾並存放了txt檔案 現在需要獲取絕對路徑 之前在網上找了很多 但總存在型別不匹配問題 以下為解決方案: char * filename= new char[100] ; WCHAR *filename_L

tableView,在didSelectRowAtIndexPath,獲取當前

先說一點廢話,記錄下自己是如何遇到這個問題的,長長記性! 在didSelectRowAtIndexPath方法中,我要點選當前的 cell, 跳轉到下一個控制器,然後將當前 cell 的組名,傳給下

獲取當前時間戳隨機數的獲取、Java Random、ThreadLocalRandom、UUID類的方法應用(隨機數)

(一)獲取時間戳:第一種方法:var timestamp = Date.parse(new Date());結果:1280977330000第二種方法:var timestamp = (new Date()).valueOf();結果:1280977330748第三種方法:v

c語言獲取當前工作路徑(轉)

------------------------------------------------------------------------------------- Linux --------------------------------------------------------------

java獲取當前日期時間的方法

一. 獲取當前系統時間和日期並格式化輸出: import Java.util.Date; import java.text.SimpleDateFormat; public class NowSt