2

サーバーのリストを含むファイルがあります。

サーバー.TXT:

    192.168.0.100
    192.168.0.101
    192.168.0.102

gnome ターミナル スクリプトから、各サーバーのタブで新しいターミナルを開きたいと思います。

これが私が試したものです:

gnome-terminal --profile=TabProfile `while read SERVER ; do echo "--tab -e 'ssh usr@$SERVER'"; done < SERVERS.TXT`

エラーは次のとおりです。

引数の解析に失敗しました: "--command/-e" への引数は有効なコマンドではありません: ' の一致する引用符が見つかる前にテキストが終了しました。(テキストは「ssh」でした)

-e の後のスペースを削除しようとしました

gnome-terminal --profile=TabProfile `while read SERVER ; do echo "--tab -e'ssh usr@$SERVER'"; done < SERVERS.TXT`

そして、同様のエラーが発生します:

引数の解析に失敗しました: "--command/-e" への引数は有効なコマンドではありません: ' の一致する引用符が見つかる前にテキストが終了しました。(テキストは「usr@192.168.0.100」でした)

シェルは、スペースを使用して区切り文字を予測して配置することで役立つようにしようとしているため、明らかに解析エラーがあります。サーバー ファイルは予告なしに変更されるため、多くの異なるサーバー セットを調べる必要があります。

4

4 に答える 4

1

OPの問題に対する回答を探しているときにこの質問を見つけましたが、私の問題は少し異なりました。サーバーのリストは知っていましたが、ファイルにはありませんでした。

とにかく、投稿された他の解決策はうまくいきませんでしたが、次のスクリプトはうまくいき、"--command/-e" is not a valid command"エラーを回避するために使用しています。

スクリプトは、必要に応じて非常に簡単に変更できます。

#!/bin/sh
# Open a terminal to each of the servers
#
# The list of servers
LIST="server1.info server2.info server3.info server4.info"
cmdssh=`which ssh`

for s in $LIST
do
    title=`echo -n "${s}" | sed 's/^\(.\)/\U\1/'`
    args="${args} --tab --title=\"$title\" --command=\"${cmdssh} ${s}.com\""
done

tmpfile=`mktemp`
echo "gnome-terminal${args}" > $tmpfile
chmod 744 $tmpfile
. $tmpfile
rm $tmpfile

ここで大きな問題は、ファイルから実行すると機能するのに、スクリプト内からは機能しない理由です。確かに、問題は--commandパーツのエスケープに関するものですが、一時ファイルにエクスポートしない限り、試したことはすべて失敗しました。

于 2014-02-21T00:19:23.910 に答える