Por que o bash não está encontrando minha pasta Desktop claramente existente?

1

Provavelmente estou fazendo algo estúpido / obviamente errado aqui, mas estou tentando canalizar um script com curl e executá-lo no Terminal no OS X. O comando que estou usando para fazer isso é:

sh -s stable < <(curl -L http://path_to_my_script/)

Isto parece estar funcionando perfeitamente corretamente; no entanto, a primeira linha do script baixado não está funcionando. Por algum motivo, "cd ~ / Desktop" está causando o erro "Nenhum arquivo ou diretório". Tenho certeza de que minha área de trabalho existe e esse comando funciona quando eu o executo manualmente. Quando tentei colocar "ls" como a primeira linha para diagnosticar o problema, ele nem sequer reconheceu o comando. Existe algo que eu preciso fazer para fazer com que comandos como "cd" e "ls" funcionem corretamente?

Obrigado pela ajuda!

EDIT: O problema não parece ter nada a ver com o curl, como se eu baixar o script em "file.sh" e depois executar "sh file.sh", eu recebo os mesmos erros.

EDIT: aqui está o conteúdo completo do script que estou tentando executar:

#!/bin/bash
ls
cd ~/Desktop
curl https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg -o chrome.dmg
hdiutil attach chrome.dmg
cp "/Volumes/Google Chrome/Google Chrome.app" "~/Desktop/chrome.app"
hdiutil detach chrome.dmg
rm chrome.dmg
open -a chrome.app --args --make-default-browser --disable-instant-extended-api --    install-from-webstore="chrome-rdp/cbkkbcmdlboombapidmoeolnmdacpkch"
osascript 'tell application "System Preferences"
    activate
    set the current pane to pane id "com.apple.preference.mouse"
end tell'
    
por Hayden Schiff 10.12.2013 / 00:12

3 respostas

2

Eu acredito que acabei de descobrir a raiz do problema. Ao forçar o TextWrangler a salvar com quebras de linha (LF) no estilo Unix, em vez das quebras de linha no estilo do Windows (CRLF) que aparentemente estavam sendo usadas, pareço ter corrigido todos os problemas; Eu acho que estava tendo problemas porque estava tentando executar o comando "set \ r" em vez de "set", ou "ls \ r" ao invés de "ls". Parece que tudo que eu realmente preciso fazer é usar o comando 'tr' para retirar todos os caracteres de retorno de carro da saída de onda (já que aparentemente o Pastebin está usando quebras de linha CRLF). Obrigado pela ajuda a todos!

    
por 10.12.2013 / 01:15
0

Já experimentou $ HOME em vez de ~ /
(não adicionado como comentário porque não tenho reputação > = 50) Também, você poderia solucionar problemas fazendo um ls etc e vendo o que ele diz (se 'ls' não funcionar, então tente '/ bin / ls') ... 'set' é um dos meus comandos favoritos. .. então você pode ver qual é o seu PATH etc.

    
por 10.12.2013 / 00:45
0

Eu não posso dizer sem ver seu script (dica, dica), mas há algum motivo para você estar usando sh em vez de bash ? Na maioria dos sistemas modernos, sh é realmente um link para um shell diferente ( dash , por exemplo) e, mesmo que não seja, chamar bash como sh altera seu comportamento (de man bash ):

   If  bash  is  invoked  with  the name sh, it tries to mimic the startup
   behavior of historical versions of sh as  closely  as  possible,  while
   conforming  to the POSIX standard as well.  When invoked as an interac‐
   tive login shell, or a non-interactive shell with the  --login  option,
   it  first  attempts  to read and execute commands from /etc/profile and
   ~/.profile, in that order.  The  --noprofile  option  may  be  used  to
   inhibit  this  behavior.  When invoked as an interactive shell with the
   name sh, bash looks for the variable ENV, expands its value  if  it  is
   defined,  and uses the expanded value as the name of a file to read and
   execute.  Since a shell invoked as sh does not attempt to read and exe‐
   cute  commands from any other startup files, the --rcfile option has no
   effect.  A non-interactive shell invoked with  the  name  sh  does  not
   attempt  to  read  any  other  startup files.  When invoked as sh, bash
   enters posix mode after the startup files are read.

Portanto, nenhum arquivo de inicialização é lido e suas variáveis ambientais serão diferentes do que você espera. Tente executar

bash <(curl -L http://path_to_my_script/)

Eu não sei para que stable estava e a opção -s não é necessária, é ativada automaticamente na ausência de argumentos:

   -s        If the -s option is present, or if no arguments remain  after
             option  processing,  then commands are read from the standard
             input.  This option allows the positional  parameters  to  be
             set when invoking an interactive shell.
    
por 10.12.2013 / 00:52