コマンド出力をbashで変数に取り込みたいのですが、コンソールに表示することもできます。コマンド出力のリダイレクトは、スクリプトからではなくコンソールからのみ実行されます。
これは、コンソールに期待される方法で動作します。次の単純なスクリプトの中で呼び出すとき、それは期待通りに機能します。
#!/bin/bash
exec 5>&1
STATUS=$(zypper info rar|tee >(cat - >&5))
echo $STATUS
ただし、次のスクリプト内で呼び出しを行うとエラーになります。
#!/bin/sh
#
# description: currency_trader_tools installation script
# Currency_Trader software.
#
# prerequisities:
# OpenSuse Leap 42.1 x86_64
# clean installation of Minimal Server Selection (Text mode)
# install:
# Midnight Commander - linux file manager
# x11vnc - X11 vnc server
# xvfb-run - X11 virtual frame buffer server
# java - latest JDK environment rpm
#
# commit_id = "0f46a17011ca82c57ddb7f81636984c7bebd5798";
# build_revision_full = "Build 0144 created 2016-05-11 18:04:00 based on commit 0f46a17011ca82c57ddb7f81636984c7bebd5798";
# build_revision_short = "0f46a17";
# build_revision = "0144";
RETVAL=0
ZIP_FILE_VERSIONED="Currency_Trader_Bash_Scripts_0_9_1- r-0144-0f46a17.zip"
ZIP_FILE="Currency_Trader_Bash_Scripts_0_9_1.zip"
# See how we were called.
if [[ ! `whoami` = "root" ]]; then
echo "You must have administrative privileges to run this script"
echo "Try 'sudo ./currency_trader_tools_install'"
exit 1
fi
exec 5>&1
STATUS=$(zypper info rar|tee >(cat - >&5))
echo
echo $STATUS
case "$1" in
all)
install_all
;;
*)
echo $"Usage: currency_trader_tools_install {all}"
exit 1
esac
exit $RETVAL
エラーは次のとおりです。
./Currency_Trader_Bash_Scripts_0_9_1-Install-Script: command substitution: line 34: syntax error near unexpected token `('
./Currency_Trader_Bash_Scripts_0_9_1-Install-Script: command substitution: line 34: `zypper info rar|tee >(cat - >&5))'
どれ勧告、どのようにそれを用いたSHを作り、bashのではないですか?
はあなたがいうだけで変化しないよろしいですあなたのシバンを '#!/ bin/bash'に送りますか?あなたが実行しているシステムでは 'bash'が' sh '(エラーメッセージに基づいて)としてインストールされています。これは '[..]]'と '$" .. "すでに 'bash'が必要です。 –
はい、私は確信しています。 OpenSUSEではbashに切り替えることができます。しかし、私は本当に答えを知りたい。ありがとう –