vim $(cat filelist)
我嘗試按照之前的建議使用 vim 打開文件問題。
假設我有以下文件:
~/Workspace/bar/foo.cpp
包含時正確vim $(cat filelist)
開啟執行。但是,當包含時,該命令不會開啟檔案。我想知道為什麼使用絕對路徑會導致命令失敗。~/Workspace
foo.cpp
filelist
bar/foo.cpp
filelist
~/Workspace/bar/foo.cpp
答案1
這是由於不同類型的擴展在 shell 中執行的順序造成的。手冊bash
頁說:
擴展是在命令列上被分割成單字後執行的。執行了七種擴展:大括號擴展、波形符擴展、參數和變數擴展、命令替換、算術擴展、分詞和路徑名擴展。
替換~
is 波形符擴展,同時$(...)
取代 is 指令。現在您可以看到,執行命令替換後,不再有波浪號替換。使用真正的絕對路徑(從檔案系統 root 開始/
)它可以工作。
但您可以透過以下方式自行執行擴充sed
:
vim $(sed "s_~_${HOME}_g" filelist)