标签: bash

sed用NULL替换空格

使用sed

  1. 如何用NULL替换\ N.

  2. 如何替换空白区域|| 用NULL.

    |200|0||0|\N||^A|0|\N||
    
    Run Code Online (Sandbox Code Playgroud)

期望的输出

    |200|0|NULL|0|NULL|NULL|^A|0|NULL|NULL|
Run Code Online (Sandbox Code Playgroud)

linux bash sed

5
推荐指数
0
解决办法
7699
查看次数

svn导出除一些目录之外的所有目录

我做回购的SVN导出到一个临时位置,然后我删除一些目录之前我的代码库复制到部署目录.

有没有办法在"导出"命令期间"排除"目录列表?

这样做的原因是导出更快(不需要获取我在此部署中删除的东西)尾部,因此部署脚本更快.

linux svn bash export

5
推荐指数
1
解决办法
3654
查看次数

为什么bash不会因短路命令序列中的故障而停止错误?

当我运行一个bash脚本时,我看到一些对我没有意义的行为,该-e选项有多个命令与&&s 串在一起,其中一个失败.我希望脚本停止在失败的命令上并返回退出状态,但它只是愉快地执行脚本的其余部分.

以下是对我有意义的例子:

$ false && true; echo $?
1

$ bash -xe -c "false && true"; echo $?
+ false
1

$ bash -xe -c "false; true"; echo $?
+ false
1
Run Code Online (Sandbox Code Playgroud)

这是对我没有意义的那个:

$ bash -xe -c "false && true; true"; echo $?
+ false
+ true
0
Run Code Online (Sandbox Code Playgroud)

这是我不明白发生了什么的地方.false && true返回状态1所以脚本不应该停止执行并返回状态1,就像脚本一样false; true

在进行实验的过程中,我发现如果用括号括起命令链,它会按照我的预期方式工作:

$ bash -xe -c "(false && true); true"; echo $?
+ false
1
Run Code Online (Sandbox Code Playgroud)

有人能解释一下吗?

linux bash shell short-circuiting

5
推荐指数
2
解决办法
624
查看次数

运行autogen.sh时遇到麻烦

我从http://libspatialindex.github.com/下载了R tree

自从运行./autogen.sh后,我找不到文件/文件夹,因此我从github存储库下载了文件autogen.sh,如下所示:

https://raw.github.com/libspatialindex/libspatialindex/9a5a2f4d83c3ec7be4dbf2c8a86341703d837185/autogen.sh

现在当我运行./autogen.sh时,我得到"权限被拒绝"如果我运行sh ./autogen.sh我得到:

glibtoolize or libtoolize not found. Giving up!
Run Code Online (Sandbox Code Playgroud)

请建议我现在该怎么做

编辑:我也想在我的C++项目中使用libspatialindex.我正在使用netbeans.我的意思是我想在我的netbeans项目中使用libspatialindex中的函数.我应该如何使用相同的.现在我在一个单独的目录中运行config和make命令.我不知道如何在我的项目中使用它们.

linux bash ubuntu

5
推荐指数
1
解决办法
1万
查看次数

在同一文件夹终端脚本中复制具有相同名称的多个文件

我有很多名为相同的文件,目录结构(简化)如下:

 ../foo1/bar1/dir/file_1.ps  
 ../foo1/bar2/dir/file_1.ps  
 ../foo2/bar1/dir/file_1.ps
 .... and many more
Run Code Online (Sandbox Code Playgroud)

由于通过转到相应的目录来查看所有这些ps文件是非常低效的,我想将它们全部复制到另一个目录中,但是包括前两个目录的名称(与我的目的相关的那些)在文件名中.

我之前尝试过这样,但是我无法从哪里获取文件,因为它们都是连续命名的:

#!/bin/bash -xv

cp -v --backup=numbered {} */*/dir/file* ../plots/; 
Run Code Online (Sandbox Code Playgroud)

哪里../plots是我复制它们的文件夹.但是,它们现在的格式为file.ps.~x~(x是一个数字),所以我摆脱了".ps.〜*〜"并只留下ps扩展名:

rename 's/\.ps.~*~//g' *;
rename 's/\~/.ps/g' *;
Run Code Online (Sandbox Code Playgroud)

然后,由于ps文件有时会有数百个点并且需要很长时间才能打开,我只需将它们转换为jpg.

for file in * ; do convert -density 150 -quality 70 "$file" "${file/.ps/}".jpg; done;
Run Code Online (Sandbox Code Playgroud)

这不是一个真正有效的bash脚本,因为我必须手动更改目录.

我想最好的方法是从开头复制文件,并在复制的文件名中包含前两个目录的名称.

我怎么能做到这一点呢?

bash scripting copy rename

5
推荐指数
1
解决办法
8966
查看次数

在命令行参数中解析\ - python 2.7.3

parse_input.py从bash 调用一个python脚本

parse_input.py采用一个包含许多'\n'字符的命令行参数.

输入示例:

$ python parse_input.py "1\n2\n"

import sys
import pdb

if __name__ == "__main__":

    assert(len(sys.argv) == 2)

    data =  sys.argv[1]
    pdb.set_trace()
    print data
Run Code Online (Sandbox Code Playgroud)

我可以在pdb上看到`data = "1\\n2\\n"我想要的东西data="1\n2\n"

我看到类似的行为只是\ (没有\n)被替换为\\

如何删除额外的\

我不希望脚本处理额外的内容,\因为也可以从文件接收相同的输入.

bash版本:GNU bash,版本4.2.24(1)-release(i686-pc-linux-gnu)

python版本:2.7.3

python bash parsing command-line-arguments

5
推荐指数
2
解决办法
2460
查看次数

-bash:命令替换:第XX行:语法错误:意外的文件结束

为什么以下代码会在标题中给出错误?

_say_hey()
{
    echo "hey"
}
echo "$(_say_hey())"
Run Code Online (Sandbox Code Playgroud)

bash

5
推荐指数
1
解决办法
1201
查看次数

最小打字命令行计算器 - tcsh vs bash

我喜欢有一个方便的命令行计算器.要求是:

  • 支持所有基本算术运算符:+, - ,/,*,^用于求幂,加上用于分组的括号.
  • 需要最少的打字,我不想让程序与它交互,然后要求它退出.
  • 理想情况下,除了表达式本身之外,只应在命令行中输入一个字符和一个空格.
  • 它应该知道如何忽略数字中的逗号和美元(或其他货币符号),以允许我从网上复制/粘贴,而不必担心在将每个数字粘贴到计算器之前必须清理每个数字
  • 容忍白色空间,存在或缺少空格不应导致错误
  • 无需在表达式中引用任何内容以保护它免受shell的影响 - 再次为了最小化打字的好处

由于tcsh支持别名位置参数,并且由于别名扩展优先于除历史扩展之外的所有其他扩展,因此可以直接在tcsh中实现接近我理想的东西.

我用过这个:

alias C 'echo '\''\!*'\'' |tr -d '\'',\042-\047'\'' |bc -l'
Run Code Online (Sandbox Code Playgroud)

现在我可以通过最少的输入来完成以下内容:

# the basic stuff:
tcsh>  C 1+2
3

# dollar signs, multiplication, exponentiation:
tcsh>  C $8 * 1.07^10
15.73721085831652257992

# parentheses, mixed spacing, zero power:
tcsh>  C ( 2+5 ) / 8 * 2^0
.87500000000000000000

# commas in numbers, no problem here either:
tcsh>  C 1,250.21 * 1.5
1875.315
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,没有必要引用任何东西来使所有这些工作.

现在出现了问题.试图在bash中做同样的事情,其中​​不支持参数别名迫使我将计算器实现为shell函数并使用"$ @"传递参数

function C () { echo …
Run Code Online (Sandbox Code Playgroud)

unix bash shell alias tcsh

5
推荐指数
1
解决办法
1217
查看次数

如何在bash函数参数中保留尾随空格?

请考虑以下bash脚本:

#!/bin/bash

function foo {
  echo -n $1
  echo $2
}

foo 'Testing... ' 'OK' # => Testing...OK
# Whitespace --^                      ^
# Missing whitespace -----------------^
Run Code Online (Sandbox Code Playgroud)

第一个参数中的尾随空格发生了什么?怎么能保存它?

bash whitespace function

5
推荐指数
1
解决办法
1355
查看次数

悄悄地在脚本中更改Linux密码

作为尝试在root ssh会话中实施安全措施的一部分,我试图设计一种在root用户登录n秒后启动脚本的方法,并更改用户密码并自动注销用户。

我陷入尝试静默更改密码的困境。我有以下代码:

echo -e "new\nnew" | passwd -q
Run Code Online (Sandbox Code Playgroud)

这不是在手册页中提到的“悄悄地”更改密码,而是输出:

~/php-pastebin-v3 #echo -e "new\nnew" | passwd -q
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Run Code Online (Sandbox Code Playgroud)

这没有太大帮助。

我尝试使用stdout和stderr进行管道传输,但是我认为我对管道传输有误解。

~/php-pastebin-v3 #echo -e "new\nnew" | passwd -q > /dev/null
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

~/php-pastebin-v3 #echo -e "new\nnew" | passwd -q /dev/null 2>&1
passwd: user '/dev/null' does not exist
Run Code Online (Sandbox Code Playgroud)

悄悄地通过脚本更改密码的正确方法是什么?

unix linux bash shell passwd

5
推荐指数
1
解决办法
2万
查看次数