【问题标题】:I cant execute bash commands when another script is called [duplicate]调用另一个脚本时,我无法执行 bash 命令[重复]
【发布时间】:2018-05-15 02:00:52
【问题描述】:

我有点卡在这里,

这些是我的代码

#script 1
#!/bin/bash
echo ""
$(ls -l)

#script 2
#!/bin/bash


echo ""
iwconfig

#script 3    
#!/bin/bash

PATH=$(pwd)

SC1=${PATH}/script1.sh 
SC2=${PATH}/script2.sh 

echo ""
read -p "Hi, whats your name? " NOME
echo ""
read -p "Glad to meet, ${NOME}, are you fine? [S/N] " FINE

funcao(){
    if [[ "${FINE}" = "S" || "${FINE}" = "s" ]]
    then    
        ${SC1} &
        wait
        echo -e "\nGreat, ${NOME}, me too!"
    elif [[ "${FINE}" = "N" || "${FINE}" = "n" ]]
    then
        ${SC2} &
        wait
        echo -e "\nAh, ${NOME}, thats sad :("
    else
        echo "Invalid answer, ${NOME}!"
    fi
}   


funcao

我不知道为什么它一直给我这个输出

我做错了什么?

我只是测试我的技能,不需要成为重要的命令,只要它起作用。

我是 linux 新手,包括 shell/bash/etc.. 尝试学习,可能犯了一些愚蠢的错误...嗯....我的生活故事...

谢谢!

【问题讨论】:

  • 粘贴您的输出作为文本,而不是图像链接。请参阅meta.stackoverflow.com/questions/303812/… -- 注意屏幕截图只有在没有它们仍然清晰且易于理解的情况下才可接受。由于您的实际错误仅在屏幕截图链接后面给出,因此此处不适用。 (请参阅meta.stackoverflow.com/questions/285551/…,了解更多关于为什么不赞成图片链接的讨论)
  • 构建minimal reproducible example -- 产生相同问题的最短代码 -- 也是提问前的一个很好的步骤。
  • $(ls -l) 不正确。这将执行ls -l,然后尝试将输出作为命令执行。

标签: bash shell


【解决方案1】:

在脚本 3 中,您正在设置 PATH。此变量确定 bash 在哪里找到可执行文件,通过设置它可以防止 bash 查找 ls 二进制文件,因此出现此错误,为该变量使用另一个名称,你会没事的。另请查看手册的 Shell 变量 部分以了解其他特殊变量。 https://linux.die.net/man/1/bash

【讨论】:

  • 请不要链接 ABS——它是 bash 的 W3Schools,充满了不良做法的例子和过时的信息。
  • ...与仅仅避免使用特定的命名变量相反,人们应该遵循POSIX-recommended practice——见第四段——并为自己的变量使用至少一个小写字符的名称,这样可以避免冲突POSIX 指定工具的当前版本和未来版本。 (上面的链接还指定了 POSIX 明确保留的变量名称)。
  • ...也就是说,如果您确实想要一个对 bash 有意义的变量列表,对于 那个,规范参考是 @ 987654324@
  • 我删除了 abs 链接并引用了手册 :)。感谢您指出这一点!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多