linux 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)

其解释如下:
dirname $0,取得当前执行的脚本文件的父目录
cd dirname $0,进入这个目录(切换当前工作目录)
pwd,显示当前工作目录(cd执行后的)

html <table>表数据转 Json 格式

对一个小Table做个转换,需要先将HTML表格数据转成Json以便重新组合输出。于是搜索:HTML-&gt;Json,基本上都是找到以下代码: var keysArr = new Array(&quot;key0&quot;, &quot;key1&quot;,&quot;key2&quot;...

发布于:1年以前  |  2059次阅读  |  详细内容 »

telnet命令判断远程端口是否可以连接

关于telnet telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要...

发布于:1年以前  |  2348次阅读  |  详细内容 »

Ubuntu默认防火墙安装使用

iptables是基于linux系统的真正的唯一防火墙,其管理了所有的网络规则的数据库。但由于其本身的复杂性,ubuntu开发了命令行工具ufw,ufw是一个命令行的主机端的iptables类防...

发布于:1年以前  |  2057次阅读  |  详细内容 »

Shell语法快速入门

一、基本语法 1.1、shell文件开头 shell文件必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例...

发布于:1年以前  |  1682次阅读  |  详细内容 »

使用git快速切换到某一次提交

如我们都知道的,使用git时,每一次提交都会产到一个ID,我们称之为commit id。那如何快速定位到某一个提交点呢?其实很简单,git checkout commitid就可以。 比如,想到回...

发布于:1年以前  |  1547次阅读  |  详细内容 »

python下如何安装.whl包

Wheel是新一代的python模块的发布工具与方案。.whl就是Whell的文件格式,使用whl格式的文件安装需要先安装whell: python install wheel 成功之后,再直接使用python安装就...

发布于:1年以前  |  1742次阅读  |  详细内容 »

最多阅读

Shell语法快速入门 1年以前  |  1681次阅读
Shell命令在后台运行程序 1年以前  |  1616次阅读
如何查看docker镜像里的文件 10月以前  |  1506次阅读
Shell脚本编程30分钟入门 1年以前  |  537次阅读
shell十三问之12:你要if还是case呢? 1年以前  |  463次阅读
Bash脚本15分钟进阶教程 1年以前  |  459次阅读
shell十三问之11:>与< 差在哪? 1年以前  |  429次阅读
shell十三问之10:&& 与 || 差在哪? 1年以前  |  425次阅读
shell十三问之9:$@与$*差在哪? 1年以前  |  258次阅读
shell十三问之7:()与{}差在哪? 1年以前  |  245次阅读
shell十三问之6:exec跟source差在哪? 1年以前  |  237次阅读

Whoops, looks like something went wrong.