Questions tagged «bash»

有关为Bash命令外壳编写的脚本的问题。对于具有错误/语法错误的shell脚本,请在此处发布之前,使用shellcheck程序(或在Web shellcheck服务器中的https://shellcheck.net)进行检查。有关Bash交互使用的问题更可能是Super User而不是Stack Overflow上的话题。

3
如何在xargs命令中使用>?
我想找到一个bash命令,它将使我grep目录中的每个文件并将该grep的输出写入单独的文件。我的猜测是要做这样的事情 ls -1 | xargs -I{} "grep ABC '{}' > '{}'.out" 但是据我所知,xargs不喜欢双引号。但是,如果删除双引号,那么该命令会将整个命令的输出重定向到一个名为'{}'。out的文件中,而不是一系列单独的文件中。 有人知道使用xargs做到这一点的方法吗?我只是以这个grep场景为例来说明xargs的问题,因此任何不使用xargs的解决方案都不适合我。
160 bash  redirect  xargs 

7
将命令行参数转换为Bash中的数组
如何将命令行参数转换为bash脚本数组? 我要这样: ./something.sh arg1 arg2 arg3 并将其转换为 myArray=( arg1 arg2 arg3 ) 这样我就可以在脚本中使用myArray进行进一步使用。 上一则SO文章即将结束,但没有涉及如何创建数组:如何在Bash中解析命令行参数? 我需要将参数转换为常规的bash脚本数组;我意识到我可以使用其他语言(例如Python),但是需要在bash中执行此操作。我猜我在寻找“附加”功能或类似的东西? 更新:我还想问一下如何检查零个参数并分配一个默认的数组值,并且由于下面的答案,所以能够使它工作: if [ "$#" -eq 0 ]; then myArray=( defaultarg1 defaultarg2 ) else myArray=( "$@" ) fi
160 arrays  bash  shell 

11
RVM不是功能,选择带有“ rvm use…”的红宝石将不起作用
列出红宝石版本 console:~$ rvm list rvm rubies ruby-2.0.0-p481 [ i686 ] # => - current # =* - current && default # * - default 尝试使用特定版本的红宝石 console:~$ rvm use 2.0.0 RVM is not a function, selecting rubies with 'rvm use ...' will not work. You need to change your terminal emulator …
160 ruby  bash  rvm 

4
Bash脚本-可变内容作为命令运行
我有一个Perl脚本,该脚本为我提供了一个定义的列表随机数,这些随机数与文件的行相对应。接下来,我想使用从文件中提取这些行sed。 #!/bin/bash count=$(cat last_queries.txt | wc -l) var=$(perl test.pl test2 $count) 变量var返回的输出类似:cat last_queries.txt | sed -n '12p;500p;700p'。问题是我无法运行最后一条命令。我尝试使用$var,但是输出不正确(如果我手动运行该命令,它运行正常,因此没有问题)。正确的方法是什么? PS:当然,我可以在Perl中完成所有工作,但是我正在尝试以此方式学习,因为它可以在其他情况下帮助我。
159 bash 

12
如何调试bash脚本?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 有什么方法可以调试bash脚本?例如,打印诸如“呼叫行1”,“呼叫行2”之类的执行日志的内容。
159 bash  shell 

3
在bash脚本中使用Source时出现“ source:not found”错误
我正在尝试编写(我想会是)一个简单的bash脚本,该脚本将: 运行virtualenv以创建新环境,价格为$ 1 激活虚拟环境 做更多的事情(安装django,将django-admin.py添加到virtualenv的路径,等等) 第1步工作得很好,但是我似乎无法激活virtualenv。对于不熟悉virtualenv的用户,它会创建一个activate激活虚拟环境的文件。在CLI中,使用source source $env_name/bin/activate $ env_name显然是虚拟环境安装目录的名称。 在我的脚本中,创建虚拟环境后,我将存储激活脚本的路径,如下所示: activate="`pwd`/$ENV_NAME/bin/activate" 但是当我打电话时source "$activate",我得到了: /home/clawlor/bin/scripts/djangoenv: 20: source: not found 我知道其中$activate包含激活脚本的正确路径,实际上我什至在调用之前就测试了文件是否存在source。但是source它本身似乎找不到。我也尝试过在CLI中手动运行所有步骤,一切正常。 在我的研究中,我发现了该脚本,该脚本与我想要的脚本类似,但是它还执行了许多我不需要的其他事情,例如将所有虚拟环境存储在〜/ .virtualenv目录(或其中的任何内容)中。 $ WORKON_HOME)。但是在我看来,他正在创建通向的道路activate,并source "$activate"以与我基本相同的方式打电话。 这是完整的脚本: #!/bin/sh PYTHON_PATH=~/bin/python-2.6.1/bin/python if [ $# = 1 ] then ENV_NAME="$1" virtualenv -p $PYTHON_PATH --no-site-packages $ENV_NAME activate="`pwd`/$ENV_NAME/bin/activate" if [ ! -f "$activate" ] then echo …
159 bash  virtualenv 

21
如何检索给定相对路径
给定相对路径时,是否有命令检索绝对路径? 例如,我希望$ line在dir中包含每个文件的绝对路径。 ./etc/ find ./ -type f | while read line; do echo $line done
159 bash  shell  path  absolute 

6
为什么$$返回与父进程相同的ID?
我对Bash有问题,我也不知道为什么。 在shell下,我输入: echo $$ ## print 2433 (echo $$) ## also print 2433 (./getpid) ## print 2602 “ getpid”是获取当前pid的C程序,例如: int main() { printf("%d", (int)getpid()); return 0; } 让我感到困惑的是: 我认为“(命令)”是一个子进程(对吗?),我认为其pid应该与其父pid不同,但是它们是相同的,为什么... 当我使用程序在括号之间显示pid时,显示的pid不同,对吗? 是“ $$”之类的宏吗? 你能帮助我吗?
159 bash  shell  pid  subshell 

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

10
如何在Shell脚本中获取目录中的文件列表?
我正在尝试使用Shell脚本获取目录的内容。 我的脚本是: for entry in `ls $search_dir`; do echo $entry done $search_dir相对路径在哪里。但是,$search_dir包含许多名称中带有空格的文件。在这种情况下,该脚本不会按预期运行。 我知道我可以使用for entry in *,但这仅适用于当前目录。 我知道我可以切换到该目录,使用for entry in *然后再改回,但是我的特殊情况使我无法这样做。 我有两个相对路径$search_dir和$work_dir,并且我必须同时处理这两个路径,读取它们并在其中创建/删除文件等。 那我现在该怎么办? PS:我用bash。

7
Bash foreach循环
我有输入(比如说一个文件)。每行上都有一个文件名。如何读取此文件并显示每个文件的内容。
158 bash  foreach 

4
UNIX导出命令
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 8年前关闭。 改善这个问题 我试图了解export命令的使用。 我尝试使用man export,但是此命令没有手册。 任何人都可以帮助我了解exportUNIX中的用法吗?
158 bash  shell  unix 

10
在DST安全的Linux上以bash获取昨天的日期
我有一个运行在Linux上的shell脚本,并使用此调用以以下YYYY-MM-DD格式获取昨天的日期: date -d "1 day ago" '+%Y-%m-%d' 它在大多数情况下都有效,但是当脚本在昨天早晨运行时2013-03-11 0:35 CDT返回"2013-03-09"而不是"2013-03-10"。 大概归咎于夏令时(昨天开始)。我猜想"1 day ago"实现的方式是减去2013-03-11 0:35 CDTwas 之前的24小时和24小时2013-03-09 23:35 CST,这导致的结果"2013-03-09"。 那么,在Linux上bash中获取昨天日期的一种DST安全的好方法是什么?
158 linux  bash 

6
发送字符串到标准输入
有没有一种方法可以有效地在bash中执行此操作: /my/bash/script < echo 'This string will be sent to stdin.' 我知道我可以通过管道传递回声的输出,例如: echo 'This string will be piped to stdin.' | /my/bash/script

11
重击:无限睡眠(无限阻塞)
我startx通常用X来开始评估我的.xinitrc。在我中,.xinitrc我使用启动我的窗口管理器/usr/bin/mywm。现在,如果我杀死了我的WM(为了测试其他WM),由于.xinitrc脚本到达EOF ,X也将终止。所以我在我的末尾添加了这个.xinitrc: while true; do sleep 10000; done 这样,如果我杀死WM,X不会终止。现在我的问题是:如何进行无限睡眠而不是循环睡眠?是否有一个类似于冻结脚本的命令? 最好的祝福
158 linux  bash  sleep  infinite 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.