如何使用多个shebang解释器运行同一文件?

aap*_*pap 1 bash command-line-interface

因此,假设我想在bash中运行一些命令,然后说八度。有什么办法可以用两个不同的命令运行相同的文件吗?在下面的示例中,我希望第一部分由bash运行,第二部分由八度运行

#!/bin/bash
echo helloooo
#!/bin/octave
plot(1,2)
pause()
Run Code Online (Sandbox Code Playgroud)

Léa*_*ris 5

脚本的第一行只能有一个shebang。

不确定要在此处执行的操作,但是可以在运行时使用脚本名称来切换脚本解释器

例子 myscript.sh

#!/usr/bin/env bash

case "${0##*.}" in
  # Switch script's interpreter based on script's name trailing .extension
  sh)
    echo helloooo
    ;;
  plot | octave | oct)
    octave < <(
        # Remove the Bash part of this script
        # by deleting lines up to what look like an octave shebang,
        # and send it to octave
        sed '1,/^#!.*[/[:space:]]\+octave$/d' "$0"
      )
    ;;
esac
exit # Bash stuffs ends here

# Octave stuffs starts here with fake octave shebang
#!/usr/bin/env octave
plot(1,2)
pause()
Run Code Online (Sandbox Code Playgroud)

然后创建一个指向脚本的链接:

ln --symbolic --force myscript.sh myscript.oct
Run Code Online (Sandbox Code Playgroud)

作为Bash脚本运行它:

./myscript.sh 
helloooo
Run Code Online (Sandbox Code Playgroud)

作为八度脚本运行:

./myscript.oct
...
Run Code Online (Sandbox Code Playgroud)