当前位置:首页 » 网页前端 » shell获取执行脚本目录
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

shell获取执行脚本目录

发布时间: 2022-12-09 01:24:02

‘壹’ Shell脚本获取自身路径的方法

Shell中使用 pwd 命令可以获得当前工作目录,然而‘当前工作目录’可能并不是‘脚本文件所在目录’。

可以看出, pwd 获取的‘当前工作目录’可能并不是‘脚本文件所在目录’。因此我们可以用以下方法获取脚本文件所在目录的绝对路径:

‘贰’ linux shell脚本怎么获取目录下所有txt文件名称

执行如下三条命令即可:
(1)、$script myresultfile
(2)、$ls -al *.txt
(3)、$exit

此时,该目录下的所有 txt 文件名称就会以长格式保存在 myresultfile 文件中了。

然后你再使用 SHELL 编程的功能把那些无用的列去掉即可。

‘叁’ 如何在shell脚本中执行系统命令 小小知识站

方法一:切换到shell脚本所在的目录(此时,称为目录)执行shell脚本:码码如下:cd /data/shell./hello.sh./的意思是说在当前的目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误。因为目前的目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。方法二:以绝对路径的方式去执行bash shell脚本:码码如下:/data/shell/hello.sh方法三:直接使用bash 或sh 来执行bash shell脚本:码码如下:cd /data/shellbash hello.sh或码码如下:cd /data/shellsh hello.sh注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell中的第一行(指定bash路径)。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了啊,呵呵……。方法四:在当前的shell环境中执行bash shell脚本:码码如下:cd /data/shell. hello.sh或码码如下:cd /data/shellsource hello.sh前三种方行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。

‘肆’ 怎样获得当前运行的shell脚本所在目录

pwd 在例2 例3时输出 /root/ 和 /etc/
不是需要 print working directory,是需要print file directory

‘伍’ shell脚本,获取目录的结构,保存到文件

使用递归的shell脚本没有find效率高。find 是为目录搜索而优化过的程序。

#!/bin/bash
DIR="$1"
if [ -z "$2"] ;then
echo "must set 2st argument for output file ." >& 2
exit 1
fi
OUT="$2"
DIR=$(readlink -m "$DIR")
#转换成绝对路径
find "$DIR" -type "d" >"$OUT"
#搜索目录保存到输出文件。

‘陆’ 怎么让shell脚本获得自己所在目录名

#!/bin/bash
pwd

把上面的命令保存成脚本
执行以下就行了

‘柒’ linux shell 打开执行目录

可以在shell中定义变量,然后使用变量,实现高效的跳转到对应目录,免去了输入较长的地址。
比如我装的LAMP环境,每次跑起环境都挺麻烦的。具体命令如下:
cd /opt/lamppsudo ./manager.run Linux命令需求可查询“Linux命令大全”。

‘捌’ 如何获得sh或source执行的shell脚本位置

1) 支持从其他目录执行,如 source xxx/yyy/test.sh
1) 支持 sh 和 source 执行
2) 支持路径中有空格
3) 支持 zsh 跟 bash
#!/bin/sh
if [ "$0" = "bash" ]; then
cd "$(dirname "$BASH_SOURCE")"
CUR_FILE=$(pwd)/$(basename "$BASH_SOURCE")
CUR_DIR=$(dirname "$CUR_FILE")
cd - > /dev/null
else
echo "$0" | grep -q "$PWD"
if [ $? -eq 0 ]; then
CUR_FILE=$0
else
CUR_FILE=$(pwd)/$0
fi
CUR_DIR=$(dirname "$CUR_FILE")
fi
echo $CUR_DIR

‘玖’ 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脚本

编写好的shell脚本(如:test),可以采取两种方式进行运行: 一、 $ sh test 一般不采用这种调用方式,尤其不采用“sh<test”的调用方式,因为这种方式将禁止shell读取标准输入。 也可以采用 $ ksh test 这种方式要求shell具有“可读”的访问权限。 二、直接运行可执行的shell脚本之前,首先应使用下列chmod命令,把shell脚本文件设置为可执行的文件。 chmod 755 test(除文件属主可写之外,每个用户均具有读和可执行的访问权限) chmod +rx test(同上) chmod u+rx test(只有文件属主具有读和执行的访问权限) 按照上述要求设置shell脚本文件的访问权限后,可采用下列方式,直接运行shell脚本了。 1、test(如果命令检索路径包含当前目录) 2、./test(如果命令减缩路径不包含当前目录) *说明: sh test 方式调用一个shell叫蹦可能会禁止某些shell特定的扩展功能,因而可能引起脚本无法正确执行。