Task.sh
実行権限を持つスクリプト(例)があります。
擬似コード:
if [[ Not called from inside a script ]]; then
echo 'Not called from inside a script'
else
echo 'Called from a script'
fi
Main.sh
実行権限を持つスクリプトがあります。
Value=$(Task.sh)
echo "${Value}"
予想される結果
$ Task.sh
Not called from inside a script
$ Main.sh
Called from a script
ヘルプリクエスト
疑似コードにどの条件を追加するかを提案してくださいTask.sh
答え1
1つのオプションは要求を」これをスクリプトで実行していますか?「到着する」ターミナルまたはパイプ/ファイルに接続しますか?「これを行うと、次のような状況が可能になりますTask.sh >/tmp/file
。スクリプトでは呼び出されませんが、クリップボードの代わりにファイルに書き込む必要があるようです。
これが許可されている場合は、簡単なテストを使用できます。標準出力ターミナルに接続:
if [ -t 1 ]
then
echo "stdout is a terminal (tty)"
else
echo "not a terminal (tty)"
fi
ツールは、使用されている状況に応じて、非常に類似した方法を使用して異なる方法で使用および操作されますls
。tty
たとえば、比較しls
てls | cat
答え2
ツールを使用してクリップボードに何かをコピーすることはほとんどありません。明示的に記述し、要求がある場合にのみ実行するのが最善です。
したがって、1つのオプションは、スクリプトがクリップボードを使用する必要があるコマンドライン引数を確認し、それ以外の場合はデフォルトで標準出力に印刷することです。
スクリプトでコマンドライン引数を使用しない場合は、次のように簡単です。
if [ "$1" = --clipboard ]; then
copy_to_clipboard "$data" # or whatever
else
printf "%s\n" "$data" # print to stdout
fi
getopt
または、コマンドライン引数を使用している場合は、その引数をループに含めます。
つまり、対話型ユーザーはオプションを追加することを覚えておく必要がありますが、.bashrc
そのオプションにエイリアスをインストールしたり、それに対応する項目を簡単にインストールしたりすることができます。
alias Task.sh="Task.sh --clipboard"