linux修改运行中的脚本

工作中经常会遇到,在执行一个脚本时后,觉得有些地方要补充,而这个脚本又已经运行了一段时间,如果从头再来很浪费时间,这时如果能修改这个运行中的脚本就方便多了。

如:

cat test.sh

#!/bin/bash

echo 1111

sleep 60

echo 2222

当开始运行后,如果想修改第二个echo的输出值,怎么办?

直接打开test.sh修改肯定是不行的,这就好比,一个运行中的脚本,你把文件删除了之前,脚本依然可以运行下去一样。这是因为,此时的脚本已经放在了内存里。所以要想修改脚本只能去内存里修改。linux很方便的可以看到内存里的文件(/proc目录下)。

通过:

[[email protected] tmp]# ps aux |grep
test.sh
root     27887 
0.0  0.4   4492  1100 pts/0   
S    10:20   0:00 sh test.sh

找到进程的pid,然后查看pid所对应的文件描述符:

[[email protected] tmp]# cd
/proc/27887/fd
[[email protected] fd]#
ll
total 0
lrwx------ 1 root root 64 May  8 10:21 0
-> /dev/pts/0
lrwx------ 1
root root 64 May  8 10:21 1 -> /dev/pts/0
lrwx------
1 root root 64 May  8 10:20 2 -> /dev/pts/0
lr-x------
1 root root 64 May  8 10:21 255 -> /var/tmp/test.sh

这里的255对应的文件就是我们的脚本,在这里直接编辑255这个文件

[[email protected] fd]# vi 255

#!/bin/bash
echo
111111
sleep
60
echo 333333

修改后保存退出,此时就会执行修改后的脚本了。

要注意一点,如果是直接修改原脚本文件会出现什么结果呢?

当改完后,再看fd下的文件,会发现:

[[email protected] fd]# ll
total
0
lrwx------ 1 root root 64 May  8 10:27 0 ->
/dev/pts/0
lrwx------ 1 root root 64 May  8 10:27 1 ->
/dev/pts/0
lrwx------ 1 root root 64 May  8 10:27 2 ->
/dev/pts/0
lr-x------ 1 root root 64 May  8 10:27 255 ->
/var/tmp/test.sh~ (deleted)

被标记了已经删除,系统会认为原来的脚本文件已经找不到了,所有修改后是不会执行的。

如果是一个for循环就不会生效了,如:

for i in 1 2 3 4;do

echo $i

sleep 60

done

类似这样的脚本,执行中要加一些元素到循环中是做不到的,如想修改为:

for i in 1 2 3 4 5 6 7;do

echo $i

sleep 60

done

linux修改运行中的脚本

时间: 2025-01-13 18:20:45

linux修改运行中的脚本的相关文章

教你如何修改运行中的docker容器的端口映射

在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则.那么这种情况我们该怎么处理呢?今天Docker君教你如何修改运行中的docker容器的端口映射? 方法一:删除原有容器,重新建新容器 这个解决方案最为简单,把原来的容器删掉,重新建一个.当然这次不要忘记加上端口映射. 优缺点:优点是简单快捷,在测试环境使用较多.缺点是如

[转帖]教你如何修改运行中的docker容器的端口映射

在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则.那么这种情况我们该怎么处理呢?今天Docker君教你如何修改运行中的docker容器的端口映射? 方法一:删除原有容器,重新建新容器 这个解决方案最为简单,把原来的容器删掉,重新建一个.当然这次不要忘记加上端口映射. 优缺点:优点是简单快捷,在测试环境使用较多.缺点是如

如何修改运行中的docker容器的端口映射

在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则.那么这种情况我们该怎么处理呢?今天Docker君教你如何修改运行中的docker容器的端口映射? 方法一:删除原有容器,重新建新容器 这个解决方案最为简单,把原来的容器删掉,重新建一个.当然这次不要忘记加上端口映射. 优缺点:优点是简单快捷,在测试环境使用较多.缺点是如

Linux日常工作中常用快捷右键脚本(主要是android应用)

相对于Windows系统的环境里面,Linux在自定义的右键操作中提供了便利的个性化,只需要在 ~/.gnome2/nautilus-scripts 文件里面新建脚本文件即可.由于博主从事andriod工作,下面主要介绍该日常工作里面需要用到的脚本: 1.首先,在终端输入路径~/.gnome2/nautilus-scripts,然后直接输入gedit name.txt(或者直接在文件系统里面进入该路径新建脚本文件): 2.在打开的文字编辑框输入以下命令: (1)直接安装apk文件,gnome-t

关于Cygwin的x-Server的自动运行以及相关脚本修改

常常需要用到远端服务器的图形工具,如果在windows端没用xserver的话,很多程序无法运行.一个特殊的例子,emacs在没用xserver的时候,是直接在终端中打开的,如果不修改cygwin.bat文件. 废话少说,下载安装cygwin的x11相关包.装完后,在C:\cygwin\usr\X11R6\bin下有个startxwin.bat文件,注释掉   %RUN% xterm -e /usr/bin/bash -l    这一行.以后每次点开此脚本文件,就不用弹出烦人的xterm了,而x

linux定时运行命令脚本——crontab

Linux中,周期执行的任务一般由cron这个守护进程来处理  ps -ef | grep cron cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的配置文件称为“crontab”,是“cron table”的简写. 一. cron在3个地方查找配置文件(设置shell脚本): 1./var/spool/cron/yanggang 这个目录下存放的是每个用户(包括root)的crontab任务,每个任务以创建者的名字命名,比如用户tom建的crontab任务对

[转载] linux 程序运行过程中替换文件

今天被朋友问及“Linux下可以替换运行中的程序么?”,以前依稀记得Linux下是可以的(而Windows就不让),于是随口答道“OK”.结果朋友发来一个执行结果:(test正在运行中)# cp test2 test cp: cannot create regular file `test': Text file busy 看起来是程序被占用,无法覆盖.于是自己又再做了几个实验: (1)先rm删除正在运行的test,然后cp test2 test就没有错误了.(2)先mv改名正在运行的test,

MonkyTalk学习-4-JS脚本修改运行

JS脚本的修改和运行方面的内容, 1. 导出脚本 在录制完成或者通过Table View界面编辑过之后,会自动生成JavaScript脚本,进入JavaScript的Tab下,可以看出如下的结果 点击Export按钮,会自动生成一个.js文件,内容和在JavaScript 中看到的内容相同. 2. 能做什么 If you want to include common programming structures like flow control, loops, and random numbe

windows下编写的Shell脚本在Linux下运行错误的解决方法

出现这种错误的原因:CR/LF问题,在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令. 两种解决方法: 1.将格式转换为UNIX,“编辑->格式转换(CR/LF)->UNIX”,这样Linux下就能按unix的格式保存文件 2.在vim中,输入:set ff=unix,然后:wq,同样也是转换成unix的格式 cat