2017-09-04 5 views
0

This answerは洞察力がありますが、まだ少し苦労しています。bashエイリアスでpwdとstringを連結してエンティティ名を作成する

私が望むのは、ドッカーコンテナ内のmysqlデータベースをバックアップするために使用できるエイリアスを作成することです。

この場合のコンテナ名は、作業ディレクトリとテキスト文字列の連結です(directory_name_1)。

私は(github gist)を実行するコマンドはこれです:

作業ディレクトリにバックアップファイルが保存されます
docker exec CONTAINER /usr/bin/mysqldump -u root --password=root DATABASE > backup.sql 

私は

alias WORKING_DIR="pwd | rev | cut -d "/" -f1 | rev" alias DOCKER_CONTAINER='echo $(WORKING_DIR)_my-wpdb_1' alias dumpdb='docker exec $(DOCKER_CONTAINER) mysqldump -uroot --password=password DATABASE > `pwd`/backup.sql'

alias dumpdb='docker exec `pwd`_my-string mysqldump -uroot --password=password DATABASE > `pwd`/backup.sql' 

およびバリエーションを試してみましたが、しかし、私はまだドックにチャンスをうかがっています。誰かが私を案内するほど親切になるでしょうか?

+1

エイリアスを使用することは必須ですか?関数を作成することによっても可能です。 –

+0

あなたは理論的にエイリアスを作成できるbashスクリプトのような意味ですか?私はちょうどプロセスを合理化したい。 – MikeiLL

+0

'> $(pwd)/ backup.sql'は'> ./backup.sql'と同じです。これは '> backup.sql'と同じです。バックアップの場所に関する問題は表示されません。 – Kusalananda

答えて

1

良い解決策は、関数を使用することです(エイリアスではありません)。

なぜですか? エイリアスは、単純な変更(コマンドに余分な引数やフラグを追加する場合など)にのみ使用されるためです。

したがって、関数またはシェルスクリプトを作成することができます。私たちの場合、それはかなり単純な問題なので、関数を作成することができます。あなたがそう.bash_profileの

上でそれを書く必要があります

、たとえば、あなたがいることを書いた後、次の関数に

function dumpdb() 
{ 
    local wkdir="basename $(pwd)" 
    local container="${wkdir}_my-wpdb_1" 
    docker exec ${container} mysqldump -uroot --password=password DATABASE > backup.sql 
} 

を定義しようとするかもしれない、とのいずれか(あなたのbash_profileをリロードソースの.bash_profileを使用しますか、新しいセッションを作成する場合)、エイリアスのようにコンソール上でdumpdbを実行することができます。

1
dumpdb() { 
    docker exec "${PWD##*/}_my-wpdb_1" \ 
     mysqldump -uroot --password=password DATABASE >backup.sql 
} 

あるいは、別名として:

alias dumpdb='docker exec "${PWD##*/}_my-wpdb_1" \ 
    mysqldump -uroot --password=password DATABASE >backup.sql' 

機能を使用することにより、あなたはたとえば、データベース名を渡すことができます。

dumpdb() { 
    docker exec "${PWD##*/}_my-wpdb_1" \ 
     mysqldump -uroot --password=password "$1" >backup.sql 
} 

dumpdb "my_database" 

${PWD##*/}のベース名に拡大します親の作業ディレクトリ。 $PWD/home/user/stuffの場合、${PWD##*/}stuffとなります。

リダイレクト先のファイルにディレクトリ名を指定しないと、ファイルは現在の作業ディレクトリに保存されるため、pwdを使用する必要はありません。

+0

ありがとうございます。私は他の答えを受け入れました。なぜなら、それが最初に来て、彼はあなたよりも多くのポイントを使うことができるようです。どちらも本当に便利です。 '$ 2'と' $ 3'を受け入れるように拡張し、パラメータが与えられていなければ 'if'ステートメントを使って変数を設定することができると思いますか? – MikeiLL

+1

@MikeiLLはい、あなたは、あなたが関数内で必要とするものは何でもできます。 – Kusalananda

+0

'〜/ .bashrc'のようにかなり長くなるかもしれません。異なる機能セット、異なるワークフローのエイリアスをロードする場合、一般的に人々は何をしますか? – MikeiLL

関連する問題