ack 命令没有从 bash 脚本中的当前目录 return 输出
ack command didn't return output from current directory in bash script
(已编辑)
假设我有这样的目录结构:
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
我怎样才能使用第一个脚本并给我想要的结果?
我认为这里的问题是:
您目前在 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
。现在它在 txt
文件中找到 something
,因此,输出 1
(假设只有 1 个匹配行)。
就像你写的脚本一样,它永远不会在同一目录中列出(ls指令)和计数(wc指令) , 所以你没有结果保证。
此外,根据您将在其中启动脚本的目录,它可能根本不起作用。
您可以考虑在脚本开头管理路径(并且不要在指令之间修改它)吗?
您是否确切知道它在系统中的什么位置?
另一种方法是创建一个环境变量(例如在 ~/.bash_profile 文件中),并在脚本的开头使用它,确保它会总是 运行 在 good 目录中。
经过一些实验,我可以使用函数达到我想要的结果
#!/bin/bash
function findfile(){
ack -n 'something' | wc -l
}
cd ..
findfile
它会给你 1
谢谢你回答我的问题
(已编辑) 假设我有这样的目录结构:
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
我怎样才能使用第一个脚本并给我想要的结果?
我认为这里的问题是:
您目前在 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
。现在它在 txt
文件中找到 something
,因此,输出 1
(假设只有 1 个匹配行)。
就像你写的脚本一样,它永远不会在同一目录中列出(ls指令)和计数(wc指令) , 所以你没有结果保证。
此外,根据您将在其中启动脚本的目录,它可能根本不起作用。
您可以考虑在脚本开头管理路径(并且不要在指令之间修改它)吗?
您是否确切知道它在系统中的什么位置? 另一种方法是创建一个环境变量(例如在 ~/.bash_profile 文件中),并在脚本的开头使用它,确保它会总是 运行 在 good 目录中。
经过一些实验,我可以使用函数达到我想要的结果
#!/bin/bash
function findfile(){
ack -n 'something' | wc -l
}
cd ..
findfile
它会给你 1
谢谢你回答我的问题