bash-c注意事項

1757 ワード

使用法:bash-c「cmd string」は通常shellを使用してスクリプトを実行し、2つの方法bash xxx.sh、もう1つはbash-c「cmd string」がbash xxxに対してである.sh、まずbashは現在のディレクトリでxxxを探します.sh,見つかった場合はそのまま実行し,見つからない場合は環境変数$PATHの指定経路に従って順番に探し,見つかった場合は実行し,見つからない場合はエラーを報告する.shellスクリプトのパラメータ$0は、実行するshellスクリプトxxxである.sh,$1はxxxに続く.shのパラメータ,$2$3は順次類推する
bash-cの「cmd string」についてはまず公式の説明を見てみましょう
-c        If the -c option is present, then commands are read from the first non-option argument command_string.  If there are arguments after the command_string, they are
           assigned to the positional parameters, starting with $0.

つまり、-cを使用するとbashは最初の非オプションパラメータの後ろの文字列からコマンドを読み出す、文字列に複数のスペースがある場合、最初のスペースの前の文字列は実行するコマンド、すなわち$0であり、後ろのパラメータ、すなわち$1,$2...である.例を見てみましょうまずatest shellスクリプトがあります.その内容は
echo $0
echo $1
echo $2

bash-c「./atest hello world」を実行し、彼の出力は以下の通りです.
./atest
hello
world

bash-cを使用するには2点に注意してください.
  • -c最初の文字列は必ずコマンドパスであり、ファイル名ではなく、./atestの前の./削除すると、コマンド
  • が見つかりません.
  • コマンドファイルには、実行可能な権限、すなわち./が必要です.atestにはx属性
  • が必要です
  • 個人理解bash-c"./atest hello world"実際と./atest hello worldは等価なので、上の1 2つの注意点もあります.しかもこの時はatestの冒頭の位置は、私たちが一般的に書いた#!/usr/bin/sh #!/usr/bin/env pythonという文が機能します(したがって、最初は必ずshell仕様で書きます).この場合、スクリプトを本当に実行するプログラムは、最初に指定した行であり、指定されていない場合はbashがデフォルトで使用されます(shellでコマンドを実行します).bash-c"./atest hello world"および./atest hello worldは等価ですが、具体的には何か違いがありますか?はい、上の紹介では端末で直接コマンドを実行します.では、コードで上記のスクリプトを実行する場合、fork+execなどの場合、bash-cを使用するのが一般的ですが、bashの環境変数に注意し、crontabでこのスクリプトを走るのと差が少なく、環境変数に注意してください.

  • bashには$BASH_などの他の特有の環境変数がカプセル化されています.ARGVパラメータ配列$BASH_ARGCパラメータ配列の長さはbashで直接使用できますが、これらはbash固有のものです.詳細は、次の項を参照してください.https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html