
端末のコマンド文字列から引数を渡そうとします。私はこのコマンドを検出し、ユーザーがスクリプトが何をしているのかを見るようにスクリプトを修正しています。
これが私が検出したいものです。
[root@linuxtest] ./testscript.sh $1 -v
このコマンドは、端末でスクリプトが実行する操作を詳細に説明し、それをログファイルに書き込みます。ユーザーに応じて、スクリプトはユーザーが入力したコマンドを検出します。
sh testscript.sh $1 -v
または
./teshscript.sh -v
スクリプトにはすでに次のコマンドがあります。
1> {log} 2>&1を実行します。
これにより、エコーをファイルに書き込むことができます。ただし、これは端末には表示されず、{LOG}ファイルが保存されているパスに関係なくテキストファイルに書き込まれます。私が今持っているのはこれです:
name=`sh testscipt.sh $1 -v`
if [[ -n "$name" ]]; then
2>&1 2>&- | tee -a ${LOG}
else
1> {LOG} 2>&1
fi
しかし、いつ設定する必要があるかについてのロジックが何であるかはわかりません。これを可能にするために「getops」を調べましたが、構文が何であるかよくわかりません。したがって、本質的にユーザーが実行できるようにしようとしますが、ユーザーがそれを表示するには、端末でエコーを表示するためにそのコマンドを入力する必要があります。
getops / caseをスイッチとして使用し、ユーザーがコマンドを入力したときに検出されるパラメータを渡す正しい方法は何ですか?
答え1
リダイレクトとパイプはコマンドの一部ではありません。パイプの構造です。〜サイ注文する。したがって、標準出力または標準エラーをリダイレクトするための引数を見つけるためにコマンドライン引数を見ることはできません。
ただし、(標準入力)、(標準出力)、および(標準エラー)が/proc/$$/fd
にリンクされていることを確認して確認できます。0
1
2
$ cat foo.sh
#!/bin/bash
echo "My pid is $$"
ls -l /proc/$$/fd/
$ ./foo.sh 2> /tmp/errorsgohere
My pid is 30842
total 0
lrwx------ 1 username username 64 Jun 28 14:33 0 -> /dev/pts/0
lrwx------ 1 username username 64 Jun 28 14:33 1 -> /dev/pts/0
l-wx------ 1 username username 64 Jun 28 14:33 2 -> /tmp/errorsgohere
lr-x------ 1 username username 64 Jun 28 14:33 255 -> /home/username/foo.sh