首页 > 解决方案 > ack 命令没有从 bash 脚本中的当前目录返回输出

问题描述

(已编辑)假设我有一些这样的目录结构:

lv1_directory
|  file_contain_word_something.txt
|  lv2_directory

所以现在我在 lv2_directory 我有这样的代码:

#!/bin/bash
findfile=$(ack -n 'something' . | wc -l)
cd ..
ls
echo $findfile

当我运行脚本时它给了我

lv2_directory            file_contain_word_something.txt
0

但是如果我没有将它分配给变量它就像魅力一样

#!/bin/bash
cd ..
ls
ack -n 'something' | wl -l

它给了我

lv2_directory            file_contain_word_something.txt
1

所以我必须把它改成这个才能工作

#!/bin/bash
findfile=$(ack -n 'something' .. | wc -l)
cd ..
ls  
echo $findfile 

它给了我想要的结果

lv2_directory            file_contain_word_something.txt
1

我如何使用第一个脚本并给我想要的结果?

标签: bashshellack

解决方案


我认为这里的问题是:

您目前在lv2_directory其中没有任何与字符串匹配的文件'something'。所以当你ack从这个目录本身开火时,你会得到0行数。然后你做cd..

#!/bin/bash
findfile=$(ack -n 'something' . | wc -l)
cd ..
ls
echo $findfile

现在,在您的下一个片段中:

#!/bin/bash
cd ..
ls
ack -n 'something' | wl -l

你是先做的cd,所以你是进去lv1_directory的,里面有文件file_contain_word_something.txt。然后你解雇你的ack. 现在它somethingtxt文件中找到,因此将您1作为输出(假设只有 1 个匹配行)。


推荐阅读