GNU/Linux >> Linux の 問題 >  >> Linux

bash および Linux カーネルでの Shebang 行の制限

カーネルを再コンパイルしてより長いシバン行を取得したくない場合は、ラッパーを作成できます:

#!/bin/bash

if [[ $# -eq 0 ]]; then
    echo "usage: ${0##*/} script [args ...]"
    exit
fi

# we're going to expand a variable *unquoted* to use word splitting, but
# we don't want to have path expansion effects, so turn that off
set -f

shebang=$(head -1 "$1")
if [[ $shebang == '#!'* ]]; then
    interp=( ${shebang#\#!} )        # use an array in case a argument is there too
else
    interp=( /bin/sh )
fi

# now run it
exec "${interp[@]}" "[email protected]"

そして次のようなスクリプトを実行します:wrapper.sh script.sh


カーネルのコンパイル時のバッファ制限により、99.9% のシステムで 127 文字に制限されています。

カーネルでは BINPRM_BUF_SIZE までに制限されています 、include/linux/binfmts.h で設定 .


Linux
  1. LinuxでBASHコマンドライン履歴をクリアする方法

  2. コマンドライン(bash)の「And」の違い??

  3. Linux –カスタムLinuxカーネルの構成、コンパイル、およびインストール?

  1. #の間にスペースは許可されていますか?そして/bin/ bash In Shebang?

  2. &&および||後のBashラインの継続文書化されていますか?

  3. Linux –ユーザースペースとカーネルスペースの違いは?

  1. 5 Linux Bash コマンドラインで利用可能な標準補完

  2. Linux bashでphpスクリプト(php関数)を実行する

  3. Linux コマンドラインの文字制限