
シェルスクリプトを学んでいます。私のプラットフォームはDebian 10クラウドサーバーです。次のスクリプトをテストしています。
#!/bin/bash
echo This script will exit with an exit status of 0.
exit 0
実行するとセッションが終了します!つまり、端末ウィンドウが消えます。
私が理解したexit
ように、シェルスクリプト内で実行すると、セッション全体が終了するのではなく、スクリプトだけが終了します。たぶんDebian 10はこのパターンから抜け出すことができますか?それでは、Debian 10のシェルスクリプトから値をどのように返しますか?
答え1
バッシュのマニュアルページ:
. filename [arguments]
source filename [arguments]
Read and execute commands from filename in the current shell environment...
ここで、「調達」は非常に一般的な用語です。これは、1行ずつ入力したかのようにスクリプトファイルのコマンドを実行することを意味します。同じbashにとどまりながら、すべての変数と設定を維持します。
「実行」スクリプトには定義が含まれています。どのようにまさに。一般的に通訳者を呼びます。bash script.sh
良いperl script.pl
。サフィックスは重要ではありません。重要なのは、最初の行 "binfmt": #!...
:./script
またはscript
($PATH にある場合) だけが必要なことです。
. script
(購入)
./script
(「実行」、+xが必要)
技術的には違います。
地獄のようにはいある意味、「全体」セッションです。 Ctrl-Dも同様の効果があります。制御可能ですが、対話型シェルはスクリプトと同じであるため論理的です。
努力する
]# ps
PID TTY TIME CMD
18768 pts/1 00:00:00 ps
18994 pts/1 00:00:00 bash
]# bash
]# bash
]# ps
PID TTY TIME CMD
18780 pts/1 00:00:00 bash
18781 pts/1 00:00:00 bash
18782 pts/1 00:00:00 ps
18994 pts/1 00:00:00 bash
]# exit
exit
]# exit
exit
]# ps
PID TTY TIME CMD
18784 pts/1 00:00:00 ps
18994 pts/1 00:00:00 bash
]#
...あるシェルを別のシェルの上に重ねて終了する方法を学びます。
それはすべてプロセスとタスクに関するものです。
答え2
@steeldriver さんの言葉が正しいです。次のいずれかのコマンドを使用してスクリプトを実行すると、期待どおりに機能します。
./ex01.sh
sh ex01.sh
bash ex01.sh
引用:
https://www.cyberciti.biz/faq/run-execute-sh-shell-script/