Tag: bash

在unix命令行中移除文件的前N行

我试图从一个非常非常大的文件中删除前37行。 我开始尝试sed和awk,但他们似乎需要将数据复制到一个新的文件。 我正在寻找一个“删除线路就位”的方法,不像sed -i不做任何types的副本,而只是删除现有文件中的行。 这是我所做的… awk 'NR > 37' file.xml > 'f2.xml' sed -i '1,37d' file.xml 这两个似乎做了一个完整的副本。 有没有其他简单的CLI,可以做到这一点,没有一个完整的文件遍历?

从PHP脚本执行一个Bash脚本

我想从PHP脚本执行系统上的Bash脚本。 我在系统上有两个脚本。 其中一个是名为client.php的PHP脚本,它存在于/ var / www / html,另一个是名为testscript的Bash脚本,它存在于/ home / testuser。 我的client.php脚本看起来像 <?php $message=shell_exec("/home/testuser/testscript 2>&1"); print_r($message); ?> 我的testscript看起来像 #!/bin/bash echo "Testscript run succesful" 当我在terminal上做以下事情 php client.php 我在terminal上得到以下输出 Testscript run successful 但是,当我打开页面 http://serverdomain/client.php 我得到以下输出 sh: /home/testuser/testscript: Permission denied 即使在执行了chmod + x testscript之后,我仍然得到这个错误。 我怎样才能从浏览器中工作? 请帮忙。

bash:强制exec'd进程具有无缓冲的stdout

我有一个脚本,如: #!/bin/bash exec /usr/bin/some_binary > /tmp/my.log 2>&1 问题是some_binary将所有的日志logging发送到标准输出,而缓冲使得我只能看到几行输出。 这是令人讨厌的东西卡住了,我需要看看最后一行说什么。 有没有办法使stdout无缓冲之前,我会执行这将影响some_binary,所以它有更多有用的日志logging? (包装脚本只是在exec之前设置一些环境variables,所以perl或python中的解决scheme也是可行的。)

检测用户的path中是否有特定的目录

使用/bin/bash ,我将如何检测用户是否在其$ PATHvariables中有特定的目录? 例如 if [ -p "$HOME/bin" ]; then echo "Your path is missing ~/bin, you might want to add it." else echo "Your path is correctly set" fi

从Bash中另一个更大的文本文件中find文本文件的行的最快方法

我有两个文件, file1.txt和file2.txt 。 file1.txt约有14K行, file2.txt约有20亿。 file1.txt每行有一个字段f1 ,而file2.txt有3个字段,从f1到f3 ,由| 。 我想从file2.txt中find所有行,其中file1.txt f2与file2.txt f2匹配(或者如果我们不想花费额外的时间分割file2.txt的值,则file2.txt )。 file1.txt(约14K行, 未sorting ): foo1 foo2 … bar1 bar2 … file2.txt(约20亿行, 未sorting ): date1|foo1|number1 date2|foo2|number2 date3|foo3|number3 … date1|bar1|number1 date2|bar2|number2 date3|bar3|number3 预期产出: date1|foo1|number1 date2|foo2|number2 date1|bar1|number1 date2|bar2|number2 … 这是我已经尝试过,似乎需要几个小时才能运行: fgrep -F -f file1.txt file2.txt > file.matched 我想知道是否有一个更好,更快的方式来执行这个操作与普通的Unix命令或一个小脚本。

在bash中间接variables赋值

似乎在bash中进行间接variables设置的推荐方法是使用eval : var=x; val=foo eval $var=$val echo $x # –> foo 问题是通常与eval : var=x; val=1$'\n'pwd eval $var=$val # bad output here (因为在很多地方都推荐它,所以我想知道有多less个脚本因为这个而变得脆弱) 在任何情况下,使用(转义)引号的显而易见的解决scheme实际上并不工作: var=x; val=1\"$'\n'pwd\" eval $var=\"$val\" # fail with the above 事情是,bash有间接variables引用(在${!foo} ),但我没有看到任何这样的方式来进行间接赋值 – 有没有什么理智的方法来做到这一点? 为了logging,我find了一个解决scheme,但这不是我认为是“理智”的东西…: eval "$var='"${val//\'/\'\"\'\"\'}"'"

如何处理以连字符( – )字符开头的文件名?

不知何故,在某个时候,我不小心在我的主目录中创build了一个名为“-s”的文件。 它大约是500 kb,我不知道它是否包含重要的数据。 我找不出任何方法来处理这个文件,因为我用来查看,复制或移动它的每个命令都将文件名解释为一个参数。 我试过把它放在引号中,用反斜杠,两者的组合来转义它,似乎没有任何工作。 另外,当我第一次向同事提出这个问题的时候,我们困惑了一会儿,直到有人终于听到,问“你为什么不重新命名呢?” 我向他解释说,cp和mv都认为文件名是一个参数,所以它不起作用,他说:“不,不是从命令行,从Gnome执行。 我羞于听从他的build议,而且工作。 不过如果你没有窗口pipe理器,命令行是唯一的select,我仍然对如何解决这个难题感兴趣。

在脚本和浮点部门

我想在我的脚本中执行以下操作: 1 – ((m – 20) / 34) 我想把这个操作的结果分配给另一个variables。 我想我的脚本使用浮点math。 例如,对于m = 34: results = 1 – ((34 – 20) / 34) == 0.588

Bash:将string拆分为字符数组

我有一个Bash shell脚本中的string,我想分割成一个字符数组,而不是基于分隔符,但每个数组索引只有一个字符。 我该怎么做? 理想情况下,它不会使用任何外部程序。 让我重述一下。 我的目标是可移植性,因此可能在任何POSIX兼容系统上的sed等都可以。

Shell脚本:通过ssh脚本运行函数

有没有什么聪明的方法通过ssh在远程主机上运行本地Bash函数? 例如: #!/bin/bash #Definition of the function f () { ls -l; } #I want to use the function locally f #Execution of the function on the remote machine. ssh user@host f #Reuse of the same function on another machine. ssh user@host2 f 是的,我知道这是行不通的,但有没有办法做到这一点?