簡體   English   中英

為什么'cp'在這個shell腳本中失敗了?

[英]Why is 'cp' failing in this shell script?

這是我編寫的shell腳本的代碼片段:

for src in $(find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc)
do
    src=$(basename ${src})
    dest="~/.${src}"
    copy="${src} -> ${dest}"
    cp $src $dest && echo -e "${ok} ${copy}" || echo -e "${fail} ${copy}"
done

由於某種原因, cp無法執行。 例如,在$src='bashrc'的情況下,我收到此錯誤:

cp: ~/.bashrc: No such file or directory

我不明白為什么會發生這種情況,因為很明顯, ~/.bashrc目的地 ,而不是源,所以cp不應該關心它是否存在。 究竟出了什么問題?

嘗試使用$HOME而不是~/作為您的主目錄。

dest="$HOME/.$src"

此外,如果您的任何文件名中都有空格,您可能希望在$src$dest變量周圍加上引號。

cp "$src" "$dest" && echo -e "${ok} ${copy}" || echo -e "${fail} ${copy}"

當出現在雙引號中時,“〜”不會擴展到您的主目錄。 請改用"${HOME}/.${src}" 還要考慮使用另一種方法,當文件名包含空格時(哦,我只需要考慮我們所有的傻mp3文件及其中的空格!)。 而不是做

for src in $(find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc)
do
    # ...
done

比較喜歡

find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc | while read src
do
    # ...
done

因此,通過結合@sirlancelots和我的空間修復,我們得到:

find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc | while read src
do
    src=$(basename "${src}")
    dest="${HOME}/.${src}"
    copy="${src} -> ${dest}"
    cp "$src" "$dest" && echo -e "${ok} ${copy}" || echo -e "${fail} ${copy}"
done

你已經逃過了〜所以它不會擴展而且cp不知道該怎么做。

dest=~/".${src}"

bash應該這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM