Tag: bash

为什么应该在Bash中避免使用eval,而应该使用什么呢?

一次又一次,我看到Bash使用eval回答堆栈溢出问题,并且为了使用这样的“邪恶”构造,答案会被打破,双关语意图。 为什么eval如此邪恶? 如果eval不能安全使用,应该用什么来代替?

如何迭代Bash脚本中的参数

我有一个复杂的命令,我想制作一个shell / bash脚本。 我可以很容易地把它写成$1 foo $1 args -o $1.ext 我希望能够将多个input名称传递给脚本。 什么是正确的方法来做到这一点? 而且,当然,我想处理其中有空格的文件名。

如何在Linux / Unix上永久设置$ PATH?

我试图添加一个目录到我的path,所以它将始终在我的Linuxpath。 我试过了: export PATH=$PATH:/path/to/dir 这是有效的,但是每次我退出terminal并启动一个新的terminal实例,这个path都会丢失,我需要再次运行export命令。 我该怎么做,这将永久设置?

shell编程中的$(command)和`command`有什么区别?

在sh / ksh / bash中将一个命令的输出作为一个variables来存储,你也可以这样做 MY_VAR=$(command) #or you can do MY_VAR=`command` 两种方法之间有什么区别?

转义sedreplace模式的string

在我的bash脚本中,我有一个外部(从用户接收)string,我应该在sed模式中使用。 REPLACE="<funny characters here>" sed "s/KEYWORD/$REPLACE/g" 我怎样才能逃避$REPLACEstring,所以它会被sed安全地接受为字面replace? 注: KEYWORD是一个哑巴的子串,没有匹配等,它不是由用户提供。

如何比较Bash中的“if”语句中的两个stringvariables?

我试图让一个if语句在Bash中工作(使用Ubuntu ): #!/bin/bash s1="hi" s2="hi" if ["$s1" == "$s2"] then echo match fi 我已经尝试了各种forms的if语句,使用[["$s1" == "$s2"]] ,使用和不使用引号,使用= , ==和-eq ,但我仍然得到以下错误: [嗨:命令未find 我看了各种网站和教程,并复制这些,但它不工作 – 我做错了什么? 最后,我想说如果$s1包含$s2 ,那么我该怎么做呢? 我只是工作了空间位..:/我怎么说包含? 我试过了 if [[ "$s1" == "*$s2*" ]] 但它没有工作。

如何编写一个bash脚本来重新启动进程,如果它死了?

我有一个Python脚本,将检查一个队列,并对每个项目执行一个操作: # checkqueue.py while True: check_queue() do_something() 如何编写一个bash脚本来检查它是否正在运行,如果没有,就启动它。 大致下面的伪代码(或者它应该做类似ps | grep ?的东西): # keepalivescript.sh if processidfile exists: if processid is running: exit, all ok run checkqueue.py write processid to processidfile 我会从crontab中调用它: # crontab */5 * * * * /path/to/keepalivescript.sh

Bash中的dynamicvariables名称

我对bash脚本感到困惑。 我有以下代码: function grep_search() { magic_way_to_define_magic_variable_$1=`ls | tail -1` echo $magic_variable_$1 } 我希望能够创build一个variables名称,其中包含命令的第一个参数,并带有例如ls的最后一行的值。 所以要说明我想要什么: $ ls | tail -1 stack-overflow.txt $ grep_search() open_box stack-overflow.txt 那么,我该如何定义/声明$magic_way_to_define_magic_variable_$1 ,我应该如何在脚本中调用它? 我试过eval , ${…} , \$${…} ,但我仍然感到困惑。

做一个Bash别名,需要一个参数?

我曾经使用CShell( csh ),它可以让你使一个参数的别名。 这个符号是类似的 alias junk="mv \\!* ~/.Trash" 在Bash中,这似乎不起作用。 鉴于Bash有许多有用的function,我会假设这一个已经实施,但我想知道如何。

在while循环中修改的variables不被记住

在下面的程序中,如果我在第一个if语句中将variables$foo设置为值1,它的作用就是在if语句之后记住它的值。 然而,当我设置相同的variables值为2, if这是一个while语句内,它被遗忘后的while循环。 它的行为就像我在while循环中使用某种variables$foo的副本,我只修改那个特定的副本。 这是一个完整的testing程序: #!/bin/bash set -e set -u foo=0 bar="hello" if [[ "$bar" == "hello" ]] then foo=1 echo "Setting \$foo to 1: $foo" fi echo "Variable \$foo after if statement: $foo" lines="first line\nsecond line\nthird line" echo -e $lines | while read line do if [[ "$line" == "second line" ]] then foo=2 […]