脚本不能用作命令行

时间:2017-03-26 13:20:50

标签: bash shell terminal

我已创建了执行以下操作的简单bash脚本 :

int getInt(void)
{
    int Value;
    char NL = '\0';

    printf("Enter an integer: ");    
    while (scanf("%d%c", &Value, &NL) != 2 || NL != '\n') {
        flushKeyboard();
        printf("Invalid integer, please try again:\n");
    }

    printf("You entered: %d\n", Value);

    return Value;
}

当我从CLI #!/usr/bin/env bash cf ssh "$1" 运行命令行时,它按预期运行,但是当我运行脚本时

cf ssh myapp

我收到错误:找不到应用

我不明白有什么区别,我在调用脚本后提供了应用名称,这里可能缺少什么?

更新

当我运行以下工作的脚本时,任何想法为什么“$ 1”无效......

. myscript.sh myapp 

1 个答案:

答案 0 :(得分:4)

执行此操作时:

. myscript.sh myapp

您没有运行该脚本,但您在第一个参数中命名的文件。采购意味着读取文件,因此就像在命令行中输入文件中的行一样。在你的情况下会发生什么:

  • myscript.sh作为源文件进行处理,忽略myapp参数。

  • 此行被视为注释并被跳过。

    #!/usr/bin/env bash
    
  • 这一行:

    cf ssh "$1"
    

    按原样阅读。 "$1"在调用shell中获取$1的值。可能 - 最有可能在你的情况下 - 它是空白的。

现在你应该知道为什么它 source 这个版本的脚本时按预期工作:

#!/usr/bin/env bash
cf ssh myapp 

没有$1可以解决,所以一切顺利。

运行脚本并能够将参数传递给它,您需要使文件可执行,然后执行它(而不是采购)。您可以通过以下方式执行脚本:

./script.bash arg1 arg2