In breve, i singoli comandi bash nel terminale possono contenere condizionali? Se sì, come?
Ho nel mio vimrc (condiviso tra i sistemi) il seguente comando per aprire il mio attuale documento LaTeX in formato .pdf:map ,v :!gnome-open %<.pdf <CR> <CR>
La mia domanda è:qual è il modo migliore per avere ,v eseguire semplicemente "open %<.pdf" quando sono a casa sulla mia macchina OS X? Ecco la mia ipotesi di pseudo-codice:
... if [$OSTYPE == "darwin*"] then open %<.pdf else gnome-open %<.pdf ...
Questo viene eseguito come un singolo comando BASH. Sono possibili tali condizionali? Se si, qualcuno potrebbe aiutarmi con la sintassi? In caso contrario, è possibile farlo tramite condizionali nel file vimrc?
Risposta accettata:
Un'alternativa sarebbe semplicemente generare correttamente la combinazione di tasti della mappa per il sistema operativo. Ad esempio:
if executable("cmd.exe")
map ,v :!cmd.exe /C start "" "%<.pdf"<CR><CR>
elseif $OSTYPE =~ "darwin.*"
map ,v :!open '%<.pdf'<CR><CR>
elseif executable("gnome-open")
map ,v :!gnome-open '%<.pdf'<CR><CR>
endif
Questo è stato testato e sembra funzionare, ma poiché il mio script Vim è un po' traballante e potrei aver perso alcuni dettagli come la citazione corretta, probabilmente andrei di più con l'approccio di Jander e userei solo un wrapper di shell che sono di gran lunga superiore nella scrittura .
map ,v :!open.sh '%<.pdf'<CR><CR>
E in ~/bin/open.sh
:
#!/bin/sh
if echo "$OSTYPE" | grep "^darwin" >/dev/null 2>&1; then
open "[email protected]" &
elif type gnome-open &>/dev/null; then
gnome-open "[email protected]" &
fi