質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

3回答

5047閲覧

ssh接続シェルスクリプト git bash

coko1

総合スコア276

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

0クリップ

投稿2016/10/28 09:21

編集2016/10/28 09:34

ssh接続後、リモート先でコマンドを使用して作業を行うシェルスクリプトを作成しているのですが、どうしてもうまくいかないので助けていただけると嬉しいです。ssh接続自体は成功しています。

接続後に行う作業(コマンド)
1.指定ディレクトリへ移動 cd /home/user/test
2.指定ディレクトリ内にYYYYMMDD_SEQで新規ディレクトリ作成。
3.作成したYYYYMMDD_SEQにwindows側からファイルコピー(scp?)

ssh user@host "commnd1 ; commnd2"
ssh接続の際にコマンドは上記のように渡しているのですが、作業2の処理を含めることができない状態です。
/-----------------------------------------/
//変数宣言
MYDATE=date +%Y%m%d
SEQ=1

//同名ディレクトリがあるかどうかチェック↓
while [ -d ${MYDATE}_${SEQ} ];do
SEQ=expr ${SEQ} + 1
done

//新規ディレクトリ作成
mkdir ${MYDATE}_${SEQ}
/-----------------------------------------/
※作業2の処理自体は問題なく動いています。

ssh user@host "cd ~// ; 作業2の処理 ; ファイルコピー"
↑のようにはできないのでしょうか?また、作業1~3が他のやり方で実現できるのであればそちらを提案してくださるとうれしいです。

説明に不備がありましたら、指摘してくださればその都度修正しますのでぜひお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

手元に適当な環境がないので若干机上の空論っぽいのですが・・・

まず、これって試せますかね。

ssh user@host "test -d 【ディレクトリ名】 ; echo \$?"

ディレクトリ名は、「明らかにssh先ホストに存在するもの」「明らかにssh先ホストに存在しないもの」の2パターンで試してみてください。
前者の場合は0、後者の場合は0以外が表示されると想定しています。

上記確認の結果が想定通りなら、以下でやってみてはどうでしょうか。
(想定通りでなかったら読み飛ばしてください)

#/bin/bash MYDATE=`date +%Y%m%d` SEQ=1 MYDIR="/home/user/test/${MYDATE}_${SEQ}" while [ `ssh user@host "test -d ${MYDIR} ; echo \\$?"` = "0" ]; do SEQ=`expr ${SEQ} + 1` MYDIR="/home/user/test/${MYDATE}_${SEQ}" done ssh user@host "mkdir ${MYDIR}" scp (以下略)

"while"の行のechoの後は、確か"\$?"と""を二重にエスケープしなくてはいけなかった気がします。

繰り返しですが、全く動作確認してません。
ダメだったらごめんなさい。

投稿2016/10/28 14:55

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下のリンクにある方法ではいかがでしょうか。

Linux/UNIXでローカルにあるスクリプトを配布せずにリモート先で実行させる方法 | 俺的備忘録 〜なんかいろいろ〜

スクリプト作成せずにコマンドで入力すると以下のようになります。

sh

1ssh user@host 'sh ' <<-'EOS' 2cd /home/user/test 3 4# 変数宣言 5MYDATE=$(date +%Y%m%d) 6SEQ=1 7 8# 同名ディレクトリがあるかどうかチェック 9while [ -d ${MYDATE}_$SEQ ]; do 10 SEQ=$(expr $SEQ + 1) 11done 12 13# 新規ディレクトリ作成 14mkdir ${MYDATE}_$SEQ 15EOS

投稿2016/10/28 14:49

編集2016/10/28 15:04
tkmtmkt

総合スコア1800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

相手先サーバにシェルスクリプトを置いて、それを ssh でキックするのはNGなのでしょうか?

投稿2016/10/28 09:48

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問