我已创建了执行以下操作的简单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
答案 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