2017-09-04 16 views
0

This answer非常有見地,但我仍然在努力一點。通過連接bash別名中的pwd和字符串來構建實體名稱

我想要的是創建一個別名,我可以用它來在Docker容器中備份mysql數據庫。

本例中的容器名稱是工作目錄和文本字符串的連接:directory_name_1

我想運行(github gist)命令是這樣的:

docker exec CONTAINER /usr/bin/mysqldump -u root --password=root DATABASE > backup.sql 

這使備份文件在工作目錄。

我已經試過

alias dumpdb='docker exec `pwd`_my-string mysqldump -uroot --password=password DATABASE > `pwd`/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'

但我仍然在碼頭上閒逛。有人會如此好心引導我嗎?

+1

是否必須使用別名?也可以通過創建一個函數來實現。 –

+0

你的意思是像一個bash腳本,然後我可以理論上創建一個別名?我只是想簡化流程。 – MikeiLL

+0

'> $(pwd)/ backup.sql'與'> ./ backup.sql'相同,它與'> backup.sql'相同。我沒有看到您關於備份位置的問題。 – Kusalananda

回答

1

一個好的解決方案是使用一個函數(而不是別名)。

爲什麼? 因爲別名只能用於簡單的修改(如向命令添加額外的參數/標誌)。

因此,我們可以創建一個函數或一個shellscript。在我們的例子中,因爲這是一個非常簡單的問題,所以我們可以創建一個函數。

你應該把它寫在.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