Quero poder executar 7z.exe em um script bash, mas meu script dispara No such file or directory
na definição do caminho 7z:
#declare 7zip path
7zip="/c/Program\ Files/7-Zip"
#call it
$7zip/7z x ./$filename -o$extract_folder
Eu tentei com este post :
7zip_exe="$(find /c/Program\ Files/7-Zip -name 7z.exe | head -n 1)"
O que também resulta em No such file or Directory
.
Quando investigo no Git bash (MINGW64), consigo ir para a pasta 7-Zip facilmente:
<user> MINGW64 /d/workdir
$ cd /c/Program\ Files/7-Zip/
<user> MINGW64 /c/Program Files/7-Zip
$ ls
7-zip.chm 7z.dll* 7zCon.sfx* History.txt descript.ion
7-zip.dll* 7z.exe* 7zFM.exe* Lang/ readme.txt
7-zip32.dll* 7z.sfx* 7zG.exe* License.txt
Mas quando quero analisá-lo em uma variável, o espaço é interpretado como um corte de caminho:
<user> MINGW64 /d/workdir
$ t="/c/Program\ Files/7-Zip"
<user> MINGW64 /d/workdir
$ ls $t
ls: cannot access '/c/Program\': No such file or directory
ls: cannot access 'Files/7-Zip': No such file or directory
Mas isso funciona:
<user> MINGW64 /d/workdir/NX2506
$ t="$(/c/Program\ Files/7-Zip)"
bash: /c/Program Files/7-Zip: Is a directory
E ls /c/Program\ Files/7-Zip
exibe 7z.exe
.
O que estou perdendo?
Defina a variável usando aspas duplas ou escapando o espaço. Não ambos.
Então ou
ou
E então use aspas duplas em torno da variável:
Além disso, nomes de variáveis devem começar com uma letra. Veja a definição de nome no Bash Reference Manual :