2016-07-27 62 views
1

我想要一個給定的數據庫上執行與SQL setences幾個文件:

ls -lah | grep "sql$" | awk '{print $9}' | xargs mysql -uanuser -papassword a_database < $1 

但我得到的錯誤:

bash: $1: ambiguous redirect 

如果我改變xargs的命令一個簡單的echo $1它的工作原理

我已經嘗試過雙引號是這樣的:xargs mysql -uanuser -papassword a_database < "$1""xargs mysql -uanuser -papassword a_database < $1"沒有運氣終端帶來另一個錯誤:

xargs: mysql -uanuser -papassword a_database < {}: No such file or directory 

你能幫助我嗎?

+0

LS -lah | grep「sql $」| awk'{print $ 9}'| xargs | MySQL的-uanuser -papassword a_database <$ 1 –

+0

嗨@IndraUprade它嘗試,但給我這個錯誤: '擊:$ 1:曖昧重定向 xargs的:回聲:由信號13' – cumanacr

+0

另外一個問題終止的是,'xargs'已經是從管道獲取其標準輸入,''應用'xargs',而不是'mysql'。據我所知,使用'xargs'運行命令並從標準輸入中讀取是不可能的。 – chepner

回答

1

你並不需要使用ls -l | grep | awk,華中科技大學用一個簡單的for循環上*.sql文件:

for f in *.sql; do 
    mysql -uanuser -papassword a_database < "$f" 
done 
+0

是的,如果它被寫入一行然後'''在'完成之前需要' – anubhava

+0

這適用於我感謝它只需要一點點改變一個分號,然後完成'for * in * .sql; do mysql -uanuser -papassword a_database <「$ f」;完成' – cumanacr

0

這裏是xargs的方法工作:

ls -lha | grep "sql$" | awk '{print $9}' | xargs -t -n1 -I{} bash -c "mysql -uanuser -papassword a_database < '{}'" 
+0

[不解析'ls'的輸出,這是錯誤傾向](http://stackoverflow.com/a/1447925/548225) – anubhava

+1

謝謝@anubhava我不知道,我學到了很多! – cumanacr

+0

這個'ls -lha | grep「sql $」| awk'{print $ 9}''應該替換爲'find。 -type f -name「* .sql」-print0'。並且應該將'-0'作爲選項傳遞給'xargs'來正確解析find的輸出。這將工作,即使文件名包含空格,換行符,製表符... – alvits

相關問題