Bash shell扩展显示命令未找到。

23 浏览
0 Comments

Bash shell扩展显示命令未找到。

我对bash脚本还不太熟悉,但我对它的功能感到惊讶。我遇到了一个问题,尝试了许多不同的组合来解决,但似乎无法成功。

如果有任何想法/提示/答案,将不胜感激!

问题:我有一个文件作为ldapsearch脚本的一部分被放置,它包含sAMAccountName和mail属性。这些属性在不同的行上,我想要:

1)对一个经过grep处理的文件(grep -E "sAMAccountName|mail"),它会产生每行一个条目,并将其输出为 , 然后我将将其传递给postmap hash:/etc/postfix/canonical(适用于我)。

然而!由于将命令执行的输出分配给$stuff的语句问题找不到命令... 真是让我恼火。亲爱的互联网bash大师,请指出我的错误!请注意,这里只包含了给我带来麻烦的部分代码:

ref1:Bash正则表达式if语句

#############################
#!/bin/bash
while read line; do
if [[ $line =~ ^sAM ]]; then
 stuff=$( echo "$line" | cut -d\: -f2) #<-- 找不到命令
 echo -n $stuff >> /etc/postfix/tmp-canonical
fi
if [[ $line =~ ^mail ]]; then
 stuff=$( echo "$line" | cut -d\: -f2) #<-- 找不到命令
 echo -n "$stuff\n" >> /etc/postfix/tmp-canonical
fi
done < "$1"
#end

0
0 Comments

Bash shell扩展导致命令未找到的问题,其原因是在等号之前的空格导致Bash将其解释为一个命令而不是变量赋值。解决方法是去掉空格即可。

在Bash脚本中,我们经常需要将命令的输出结果赋值给一个变量。一种常见的做法是使用命令替换,即将命令的输出结果作为一个字符串赋值给变量。例如,我们可以使用如下的代码将一个文件中的内容赋值给变量stuff:

stuff=$( echo "$line" | cut -d\: -f2)

然而,有时候我们可能会在等号之前加上一个空格,例如:

stuff =$( echo "$line" | cut -d\: -f2)

这样的写法看起来似乎没有问题,但实际上会导致一个错误。Bash shell会将这个空格之前的内容解释为一个命令,而不是一个变量赋值操作。因此,当我们尝试运行这段代码时,Bash会报错说找不到这个命令。

要解决这个问题,我们只需要去掉等号之前的空格即可,代码修改如下:

stuff=$( echo "$line" | cut -d\: -f2)

这样修改之后,Bash shell就会正确地将命令的输出结果赋值给变量stuff了。

总之,当我们在Bash脚本中进行变量赋值时,一定要注意等号之前的空格。如果出现了空格,Bash shell会将其解释为一个命令而不是变量赋值操作,从而导致命令未找到的错误。解决方法就是去掉等号之前的空格。希望这篇文章能对你理解和解决这个问题有所帮助。

0
0 Comments

在Bash shell中,出现"command not found"问题的原因是由于变量赋值的语法错误。在给变量赋值时,如果在等号(=)前后存在空格,Bash shell会将其解释为命令,而不是变量赋值。因此,当使用以下语句进行变量赋值时:

STUFF = $(echo "$line" | cut -d\: -f2)

Bash shell会将"STUFF"和"="之间的空格解释为命令,并尝试执行该命令。由于该命令是无效的,所以会出现"command not found"的错误。

要解决这个问题,只需去除"STUFF"和"="之间的空格即可。正确的变量赋值语句应该是:

STUFF=$(echo "$line" | cut -d\: -f2)

通过这样的修正,Bash shell会正确地将"$(echo "$line" | cut -d\: -f2)"的结果赋给变量"STUFF",而不会将空格解释为命令。这样就可以避免"command not found"错误的出现。

0