首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从Bash脚本本身获得其所在目录

问: 如何从Bash脚本本身获得其所在目录? 我想使用Bash脚本作为另一个应用程序启动器。我想把工作目录改为Bash脚本所在目录,以便我可以对该目录下文件进行操作,像这样: $ ....但是以相对路径方式去执行脚本时,获取目录信息是相对路径,不能满足其他需要获取绝对路径场景。 如果要获取绝对路径,可以使用如下方法: #!...测试结果如下: 另外,可以根据第一种方法结合使用 realpath 命令,也可获取脚本所在目录绝对路径: #!...为什么我不能在脚本中使用"cd"来更改目录 为什么可执行文件或脚本名称之前需要..../(点-斜杠),以便在bash运行它 shell脚本对编码和行尾符敏感吗

24020
您找到你想要的搜索结果了吗?
是的
没有找到

bash脚本如何检查一个命令是否存在

问: 如何验证程序是否存在,以一种要么返回错误并退出,要么继续执行脚本方式? 这看起来应该很容易,但它一直困扰着我。...它是一个外部进程,相对而言 hash、type 或 command 这样内置程序执行效率更高,你还可以依靠内置程序来实际执行所需操作,而且外部命令效果很容易因系统而异。...许多操作系统会让 which 做一些自定义和邪恶事情,比如更改输出,甚至 hook 包管理器。...---- 参考: stackoverflow question 592620 man bash 相关阅读: 为什么可执行文件或脚本名称之前需要..../(点-斜杠),以便在bash运行它 shell编程$(cmd) 和 `cmd` 之间有什么区别

21030

详解bash脚本调试机制

以调试模式运行脚本 通过bash -x 方式可以调试模式下运行整个脚本, bash会在在运行前打印出了每一行命令, 而且每行前面用+号表明命令嵌套层数. > bash -x debug.sh...关键字用于解释出现错误时执行预设操作, 例如打印出错命令: trap 'echo $BASH_COMMAND' ERR 但鉴于使用trap进行调试执行效率过低, 建议较为复杂脚本中直接使用调试选项或者使用...通过使用-f选项可以显著减少脚本转义字符: > ls ?...: var: unbound variable 为防止误操作覆盖文件数据, 设置禁止重定向已经存在文件: > set -C # 等价于 set -o noclobber > touch test...* > ll * -rw-rw-r-- 1 remilia remilia 0 Mar 1 20:09 '*' 到此这篇关于详解bash脚本调试机制文章就介绍这了,更多相关bash 脚本调试

1.3K31

【shell脚本】$ shell脚本使用

shell脚本 '$' 与不同符号搭配其表示意义也会不同 特殊标志符 含义 $0 当前脚本文件名 $n 传递给脚本或函数参数。n 是一个数字,表示第几个参数。...例如,第一个参数是$1,第二个参数是$2 $# 传递给脚本或函数参数个数 $* 传递给脚本或函数所有参数 $@ 传递给脚本或函数所有参数 $?...上个命令退出状态 $$ 当前Shell进程ID $() 与 `(反引号) 一样用来命令替换使用 ${} 引用变量划分出边界 注释:$* 和 $@ 都表示传递给函数或脚本所有参数,不被双引号(" "...)包含时,都以"$1" "$2" … "$n" 形式输出所有参数。.../bin/bash echo "file name $0" echo "first param $1" echo "pid $$" echo "total num of param $#" echo

6.1K20

python脚本执行shell命令方法

python脚本执行shell命令方法 最近在写python一些脚本,之前使用python都是django中使用,可能大部分内容都是偏向于后端开发方面的,最近在写一些脚本时候,发现了...使用Python处理一个shell命令或者一个执行一个shell脚本,一般情况下,有下面三种方法,下面我们来看: 第一种方法是使用os.system方法 os.system("cmd") 我们在当前目录下面创建一个...aaa.sql内容,然后下面出现数字0代表上述命令执行成功;如果我们打印bbb.sql则返回值是256,表示执行中出现了问题。...,可以得到一个脚本或者一个命令返回值和执行结果,当然,我们也可以使用下面的方法来分别校验aaa.sql文件是否存在,以及查看aaa.sql执行结果: 1[root@ /data]$python 2Python...] 7else: 8 result["result"] = false 9 result["message"] = res 10return Response(result) 如果脚本是对数据库一系列操作

5.2K00

Shell脚本逐行读取文件命令方法

方法一、使用输入重定向 逐行读取文件最简单方法是while循环中使用输入重定向。...变量为文本文件每行内容 Tips:可以将上面的脚本缩减为一行命令,如下: [root@localhost ~]# while read rows; do echo "Line contents are...- 使用echo显示输出内容,输出内容包括自定义字符串和变量,$rows变量为文本文件每行内容 Tips:可以将上面的脚本缩减为一行命令,如下: [root@localhost ~]# cat mycontent.txt...|while read rows;do echo "Line contents are : $rows";done 方法三、使用传入文件名作为参数 第三种方法将通过添加$1参数,执行脚本时,脚本后面追加文本文件名称...,并在变量“rows”中保存每一行内容 - 使用echo显示输出内容,$rows变量为文本文件每行内容 - 使用输入重定向<从命令行参数$1读取文件内容 方法四、使用awk命令 通过使用awk命令

8.7K21

Shell脚本攻略04-玩转文件描述符及重定向

理论知识 在编写脚本时候会频繁使用标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。 通过内容过滤将输出重定向文件是我们平日里基本任务之一。...也就是说把echo命令输出写入文件之前, temp.txt内容首先会被清空。...和stdout重定向同一个文件 还可以利用下面这个更好方法将stderr转换成stdout,使得stderr和stdout 都被重定向同一个文件 $ cmd >output.txt 2...: pwd2: command not found ---- 将stderr输出重定向 /dev/null 有时候,输出可能包含一些不必要信息(比如调试信息)。...如果你不想让终端充斥着有关stderr繁枝末节,那么你可以将stderr输出重定向 /dev/null cmd 2>/dev/null ---- 既可以将数据重定向文件,还可以提供一份重定向数据副本作为后续命令

83610

解决paramiko执行命令超时问题

摘录原文: paramiko远程执行后台脚本“阻塞”问题 我写远程命令通道上线之后,发现在远程脚本后台再执行另一个脚本,通道会一直等待后台脚本执行完成才会返回,有时甚至会僵死。...②、发起远程执行 本地执行 python test.py,会发现整个脚本不会立即打印run ok,而是等30s之后才打印包括test.sh所有输出信息。...2、解决办法 将远程脚本标准输出stdout重定向错误输出stderr即可,test.py 修改如下: import paramiko client = paramiko.SSHClient() client...其实原因很简单,因为bash /tmp/test.sh & 虽然是后台执行,但是依然会产生标准输出,一旦产生标准输出,paramiko就会认为命令还未执行完成,且stdoutbuffer大于stderr...这里只要将脚本执行标准输出重定向错误输出(1 &2),然后paramiko就可以使用stderr快速读取远程打屏信息了。

3.6K20

shell入门第十讲

那么Linux标准流,stdout和stderr也同样如此。如果我们使用了Linux标准流功能,当我们执行一个命令成功后,那么终端打印信息也将会被传送至stdout。...当我们执行命令失败后,那么终端打印报错信息也将会被传送至stderr。 1.1、stdout 输出重定向我们一般使用 >来表示,比如将信息输出重定向一个文件。...1.2、stderr 错误重定向我们一般使用 2> 来表示,比如将错误信息重定向一个文件。...1.4、追加信息输出重定向 我们上面的stdout和stderr只是将信息输出到一个文件,如果再次重定向输出的话,文件之前内容将会被覆盖掉,只会写入最新内容文件,比如: bash [root@...: 'cat' bash: catt: 未找到命令… ## 这是新错误信息 相似命令是: 'cat' 1.5、同时进行标准输出和错误输出至文件 企业往往是这么干,写一个脚本,包含很多命令,那么我们需要将打印服务信息命令写上

84520

《Linux命令行与shell脚本编程大全》第十五章 呈现数据

15.1 理解输入和输出 现在知道两种显示脚本输出方法 1)显示器屏幕上显示 2)将输出文件重定向文件 15.1.1 标准文件描述符 Linux系统将每个对象当做文件处理。...>>  表示追加到文件 注意:用了输出重定向,shell并未将错误消息重定向输出重定向文件。错误消息仍会显示显示器。 3.STDERR 标准错误(2) STDERR文件描述符来处理错误消息。...15.2 脚本重定向输出 有两种方法: 1)临时重定向行输出 2)永久重定向脚本所有命令 15.2.1 临时重定向 可以单独将一行重定向STDERR。...15.3 脚本重定向输入 exec 命令允许你将STDIN重定向Linux系统上文件。 例子:查看test2数据   1 #!...>> 将cat命令输出追加到由$outfile变量指定文件。 cat命令输入不在取自标准输入,而是被重定向脚本存储数据。 EOF符号标记了追加到文件数据起止。

1.3K60

shell脚本还能这么写?

变量替换 平常开发脚本会依赖很多配置,例如监听端口、配置文件之类可变参数,如果我们将其硬编码脚本,那么改起来就是牵一发动全身了,很麻烦,不可靠。.../bin/bash # set命令奇妙用途留在文章末尾 set -eu # nginx配置文件不同环境,位置可能不同,所以需要将其抽离成可配置变量,脚本来引用 NGINX_CONFIG_FILE=.../bin/bash # set命令奇妙用途留在文章末尾 set -eu # nginx配置文件不同环境,位置可能不同,所以需要将其抽离成可配置变量,脚本来引用 NGINX_CONFIG_FILE=...,需要两条命令一定条件下,一起执行,类似于事务概念,这就要通过()来实现,括号命令将会新开一个子shell顺序执行,所以括号变量不能够被脚本余下部分使用。...重定向至stdout 脚本开发过程我们使用管道时,默认只是传递stdout,某种场景下,比如需要根据stderr内容进行判断,默认情况下就不支持,需要我们进行特殊处理,stderr重定向至stdout

1.3K20

linux: 深入理解Shell输出重定向和错误处理

Unix-like系统,I/O流重定向是常见操作,它可以改变命令输出去向。...Shell,有三种主要I/O流: stdout(标准输出)- 文件描述符为1 stderr(标准错误)- 文件描述符为2 stdin(标准输入)- 文件描述符为0 如图展示了两个 nc 命令运行情况...分析第一个命令bash nc -zv 10.0.0.1 443 2>&1 >> /dev/null 这个命令 2>&1 表示将标准错误重定向当前标准输出位置,但是这个操作是 >> /dev...结论 重定向操作顺序对结果有决定性影响。当我们想要丢弃所有输出时,正确方法是先重定向 stdout /dev/null,然后再将 stderr 重定向 stdout。...设计脚本时,应该考虑这些输出处理情况,从而确保脚本各种不同环境和条件下都能稳定运行。 系统管理和自动化任务,经常需要确保输出不会干扰脚本执行或是污染日志文件。

30010
领券