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

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

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

tmuxは、複数の画面を1つのターミナル端末で独立させて操作可能にする端末多重化ソフトウェア。複数のターミナルを開くことなくtmux上の擬似端末を切り替えて操作でき、画面分割して使用することもできます。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

Q&A

解決済

1回答

1364閲覧

シェルスクリプトでのダブルクォート、シングルクォートの多用で躓いています

hilhilyzyan

総合スコア19

tmux

tmuxは、複数の画面を1つのターミナル端末で独立させて操作可能にする端末多重化ソフトウェア。複数のターミナルを開くことなくtmux上の擬似端末を切り替えて操作でき、画面分割して使用することもできます。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

0グッド

0クリップ

投稿2018/11/21 23:48

編集2018/11/22 00:23

この一連の動作を全て一度にやってしまいたいのですが、シングルクォートとダブルクォートをうまく併用することができません。

2個以上使うと、そこのダブルクォートと、そこのダブルクォートはセットじゃないのに...ということがよく起こります。

これを上手に表現できる方法はないでしょうか?
(下記のやり方でうまくいっていません。)

※分割するという方法は無しでお願いします。

send-keys 'cd ~/プロジェクトディレクトリ && docker-compose down && docker-compose up -d && docker-compose exec mysql /bin/bash -c "apt-get update && apt-get install -y locales && locale-gen ja_JP.UTF-8 && 'echo export LANG=ja_JP.UTF-8' >> ~/.bashrc && clear' C-m

補足

すみません。説明不足でした。

まず、コマンドを分割すると、

  • cd ~/プロジェクトディレクトリ (ディレクトリ移動)
  • docker-compose down(dockerの起動停止)
  • docker-compose up -d (dockerを立ち上げる)
  • docker-compose exec mysql /bin/bash -c "apt-get update && apt-get install -y locales && locale-gen ja_JP.UTF-8 && 'echo export LANG=ja_JP.UTF-8' >> ~/.bashrc(dockkerのmysqlのコンテナ内に入って、updateし、日本語を入力できるようにするためにlocalesをインストールしてから言語を設定しています)(この辺もダブルクォーテーションの中にシングルを入れればいいのか、シングルの中にダブルをいれればいいのかわからず曖昧)
  • clear

です。

それを全て&&で結合しているのですが、tmuxのsend-keysというのを使って、コマンドをシェルに送信するという作業をしています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

本来何がしたいのか不明なので、アドバイスしようがないです。
「ここからここまでをこのコマンドに与えたい」などと説明的に書いてください。

基本的には、
'の中では\によるエスケープが効かない
"の中では"$\\でエスケープする。'はそのまま書ける
・場合によってはevalが必要
です。

#補足を受けての追記
単に、一重引用符の中の二重引用符ですね。
echo export~~の引数に引用符は不要です。

Bash

1send-keys 'cd ~/プロジェクトディレクトリ && 2 docker-compose down && 3 docker-compose up -d && 4 docker-compose exec mysql /bin/bash -c "apt-get update && apt-get install -y locales && locale-gen ja_JP.UTF-8 && echo export LANG=ja_JP.UTF-8 >> ~/.bashrc " && 5 clear' C-m

投稿2018/11/22 00:01

編集2018/11/22 00:48
otn

総合スコア84557

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

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

hilhilyzyan

2018/11/22 01:02

ありがとうございます! 回答だけではなく、必要な知識まで教えていただきとても助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問