如何使屏幕命令使用shell“bash”而不是shell“sh”?

如何使屏幕命令使用shell“bash”而不是shell“sh”?

意识到我的 bash 脚本在开发中需要从第 1 行开始逐行进行彻底测试

开始伴侣终端会话

垂直分屏,左侧 emacs 编辑 bash 脚本,右侧 watch bash 脚本命令,让一侧编辑立即在右侧可见,一目了然 - 结束手动从一个屏幕到另一个屏幕的潮汐切换,或工作场所到工作场所

bash脚本,变量块,定义关联数组

*脚本无法正常工作,错误消息'语法错误:“(”意外'*

研究、发现,如果 shell 无法使用关联数组,就会发生此错误 - sh 无法做到这一点,bash 可以做到

结束屏幕,回到纯 bash,执行 bash 脚本,见证它如何正常工作

问题:有什么办法可以让 screen 命令依赖 shell“bash”而不是“sh”?有什么选项会导致该切换吗? --shell=bash?基本上,这就是所需要的。


更新

康斯坦丁·AB 是对的。事实证明:无论怎样,从技术上讲,有必要将 shebang 放在其他地方,但放在脚本的第一行中。当然,就在行的开头,使其成为整个文件的第一组字符。并且很可能基本上仅在第 1 行中设置,使其他所有内容都在第 2 行或后面的行中。

我的错误是,我 - 当然 - 设置了 bash 的 shebang - 但在第 11 行,在 10 行注释部分之后,所以,不在第 1 行。

例子:

emacs /tmp/test-script.sh(设置可执行文件,保存如下)

# Super important stuff in need of being mentioned at the top
#!/bin/bash

declare -A asso_array=(
    [var1]=""
    [var2]="Seems to work"
    [var3]="Test"
    [var4]=""
)
echo ${asso_array[@]}

echo "Hello World!"

观看/tmp/test-script.sh

Every 2.0s: /tmp/test-script.sh    Sat Jan 20 14:02:11 2024

/tmp/test-script.sh: 4: /tmp/test-script.sh: Syntax error: "(" unexpected

emacs /tmp/test-script.sh(设置可执行文件,保存如下)

#!/bin/bash
# Super important stuff in need of being mentioned at the top

declare -A asso_array=(
    [var1]=""
    [var2]="Seems to work"
    [var3]="Test"
    [var4]=""
)
echo ${asso_array[@]}

echo "Hello World!"

注意:一旦您将 shebang 放入第 1 行,路径终点(在本例中为“bash”)就会突出显示!

观看/tmp/test-script.sh

Every 2.0s: /tmp/test-script.sh    Sat Jan 20 14:05:11 2024

Test Seems to work
Hello World!

因此,吸取教训,回顾一下:

谢邦第一!无论!

这是 bash 脚本的技术必要性。

偏离了,bash 脚本基本上就会失败。

答案1

您需要将脚本标记为 bash 脚本

这是通过以正确的“开始”来完成的舍邦线”, 在这种情况下

#! /bin/bash

这告诉系统脚本在运行时由 bash 执行,而不是由其他任何东西执行。

答案2

当前接受的答案假设 OP 正在尝试运行 BASH 脚本,事实也确实如此。然而,OP 的问题本身询问screen,因此要单独回答问题而不是 OP 的情况:

$ screen --help | grep SHELL
-s shell      Shell to execute rather than $SHELL.

E.g.
$ screen -s bash -S myBashySessionName

相关内容