意识到我的 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
答案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