LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1421|回复: 15

几个使我困惑的问题,请大虾们赐教!

[复制链接]
发表于 2006-7-19 18:28:23 | 显示全部楼层 |阅读模式
1,如何使kill命令可以使用文件中的PID号,或者有没有更简单的办法在脚本中杀除一个已知程序名的程序。
2,如何在脚本中获取当前所处的路径,我在脚本中不管如何也不知道怎么把pwd的值赋给一个变量。
3,都有些意思,但我还是想知道echo $$返回的值代表什么意思?
4,如何在脚本中使一个文本文件的每一行中的第一个"."转化为其它内容,如:/mnt/e/music?
   又如何在这个文件每一行的最后增加内容?(非常困惑!)
5, 为什么我定义的一个变量,已经export过,但还是无法在打开的第二个shell中应用?另外,每次定义的变量一重启机子就没了,其中包括alias过的命令。
6,使用split可以把文件分成块,但用什么命令可以把这些个文件再重新组合起来?
7,如何删除一个文本文件中的空白行?

问得有些多,但这两天一直困扰着我,很希望能尽快解决。先谢谢大虾了!
发表于 2006-7-19 18:44:41 | 显示全部楼层
Post by pengiums
1,如何使kill命令可以使用文件中的PID号,或者有没有更简单的办法在脚本中杀除一个已知程序名的程序。
2,如何在脚本中获取当前所处的路径,我在脚本中不管如何也不知道怎么把pwd的值赋给一个变量。
3,都有些意思,但我还是想知道echo $$返回的值代表什么意思?
4,如何在脚本中使一个文本文件的每一行中的第一个"."转化为其它内容,如:/mnt/e/music?
   又如何在这个文件每一行的最后增加内容?(非常困惑!)
5, 为什么我定义的一个变量,已经export过,但还是无法在打开的第二个shell中应用?另外,每次定义的变量一重启机子就没了,其中包括alias过的命令。
6,使用split可以把文件分成块,但用什么命令可以把这些个文件再重新组合起来?
7,如何删除一个文本文件中的空白行?

问得有些多,但这两天一直困扰着我,很希望能尽快解决。先谢谢大虾了!
回答一些我懂的吧:
1. 不太懂你什么意思,也许可以试试 killall 命令
2. FOO=`pwd`
3. $$ 表示当前脚本执行时候的进程 pid 号吧
4.  sed -i 's%\.%/mnt/e/music%' foo.txt 可以替换每一行第一个碰到的"." ,使用sed -i 's%\.%/mnt/e/music%g' foo.txt 可以替换所有的 . ,但我觉得这可能不是你想要的。
5. 每个 shell 有自己的环境,子进程会继承父进程的环境,但是如果是两个平等或者无关的进程,那么他们之间的环境变量不能那样共享。要让下次开机环境变量还在,就把他写入你的shell的初始化文件中,例如 bash 可以写入 ~/.bashrc
6. cat foo1.txt foo2.txt foo3.txt > foo.txt
7. 要看你要的是纯空行还是空白行了。如果只是空行,可以用 sed  -i "/^$/d" foo.txt ,如果是要空白行可以用 sed -i "/^[[:space:]]$/d" foo.txt
回复 支持 反对

使用道具 举报

发表于 2006-7-19 18:47:10 | 显示全部楼层

怎么发表新帖子呀

怎么发表新帖子呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-20 00:15:21 | 显示全部楼层
Post by pluskid
回答一些我懂的吧:
1. 不太懂你什么意思,也许可以试试 killall 命令
2. FOO=`pwd`
3. $$ 表示当前脚本执行时候的进程 pid 号吧
4.  sed -i 's%\.%/mnt/e/music%' foo.txt 可以替换每一行第一个碰到的"." ,使用sed -i 's%\.%/mnt/e/music%g' foo.txt 可以替换所有的 . ,但我觉得这可能不是你想要的。
5. 每个 shell 有自己的环境,子进程会继承父进程的环境,但是如果是两个平等或者无关的进程,那么他们之间的环境变量不能那样共享。要让下次开机环境变量还在,就把他写入你的shell的初始化文件中,例如 bash 可以写入 ~/.bashrc
6. cat foo1.txt foo2.txt foo3.txt > foo.txt
7. 要看你要的是纯空行还是空白行了。如果只是空行,可以用 sed  -i "/^$/d" foo.txt ,如果是要空白行可以用 sed -i "/^[[:space:]]$/d" foo.txt


pluskid兄,先谢谢你了。你用的sed让我花了一个小时看网上的文档,但斩获颇丰。
下面是我的见解:
1,我的表述能力有限,没说清楚。我所要说的是:如何在一个脚本中杀死一个应用程序,
   比如,mplayer?
2, 这个我也试过,但已失败告终,最后echo的结果还是pwd本身。
3,你说的话启发了我,$$代表的是所运行的bash的pid.
4, sed 真是太棒了!但是它是流编辑器,不能改变源文件。虽然可以管道输出文件,但总
   感觉不太爽。有没有其它办法在原文件上修改的?
5,我的系统是 SuSE10.1,默认情况下没有 ~/.bashrc,也不知道有用没?但我明天起床后    试试。
6,cat 可以把文本文件合并到一块,但如果我拆开的是一个bin文件呢?(也不知道使用     split拆bin文件有效不?)
7,同4。

再次感谢pluskid兄的赐教!
回复 支持 反对

使用道具 举报

发表于 2006-7-20 01:22:40 | 显示全部楼层
1. killall mplayer 或者 kill `ps ax | awk '/mplayer/ { print $1 }'`
2. 注意左引号`
4. 注意是 sed -i '...'
回复 支持 反对

使用道具 举报

发表于 2006-7-20 08:56:08 | 显示全部楼层
Post by pengiums
pluskid兄,先谢谢你了。你用的sed让我花了一个小时看网上的文档,但斩获颇丰。
下面是我的见解:
1,我的表述能力有限,没说清楚。我所要说的是:如何在一个脚本中杀死一个应用程序,
   比如,mplayer?
2, 这个我也试过,但已失败告终,最后echo的结果还是pwd本身。
3,你说的话启发了我,$$代表的是所运行的bash的pid.
4, sed 真是太棒了!但是它是流编辑器,不能改变源文件。虽然可以管道输出文件,但总
   感觉不太爽。有没有其它办法在原文件上修改的?
5,我的系统是 SuSE10.1,默认情况下没有 ~/.bashrc,也不知道有用没?但我明天起床后    试试。
6,cat 可以把文本文件合并到一块,但如果我拆开的是一个bin文件呢?(也不知道使用     split拆bin文件有效不?)
7,同4。

再次感谢pluskid兄的赐教!

请你再仔细看一遍我前面的回答,就像楼上SDE兄说的那样。
1.  那么我的理解应该是对的,我不是提供了 killall 了吗?

  1. $ whatis killall
  2. killall              (1)  - kill processes by name
复制代码

2. 如 SDE 兄所言,请注意是 ` 而不是 '
4. 也请注意我是加了 -i 选项的,就是修改原来的文件,这是 GNU 的 sed 加进去的选项
5. 我用过 SUSE ,事实上,我用过的几个 Linux 中还没有哪个默认没有 ~/.bashrc 的,请注意 ~ 代表你的主目录
6. Linux 和 dos 不一样,linux对二进制文件和文本文件一视同仁
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-20 12:19:55 | 显示全部楼层
谢谢二位大哥的指教,受益匪浅。只怪小弟粗心,没有仔细看,莫见怪!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-20 12:26:59 | 显示全部楼层
至于那个.bashrc,哎,也是粗心,键入了.bash再用了下TAB键就说没有,其实得把.bashr键入就出来了,~~~

还是谢谢~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-20 12:38:50 | 显示全部楼层
我用split将一个6M大小的mp3分成若干份后,再用cat合成,大小竟有13M之多!?这是什么原因?
回复 支持 反对

使用道具 举报

发表于 2006-7-20 14:11:06 | 显示全部楼层
pkill - look up or signal processes based on name and other attributes. supporting pattern match for process name.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表