Почему вы вызываете cmd? Это дополнительный уровень сложности, который вам, похоже, не нужен. Вы можете вызвать программу Windows непосредственно из bash:
'C:\Program Files\sqldeveloper\sqldeveloper\bin\sdcli.exe' format input=sentencia.tmp output=sent_formateada.tmp
или
/cygdrive/c/Program\ Files/sqldeveloper/sqldeveloper/bin/sdcli.exe format input=sentencia.tmp output=sent_formateada.tmp
или любой другой способ цитирования в sh.
Если вы должны вызвать cmd, вам может потребоваться передать код cmd на стандартный ввод или в пакетный файл, а не через /c
, потому что /c
анализирует кавычки в по-другому (что не имеет смысла для меня). Это будет
cmd <<<'"C:\Program Files\sqldeveloper\sqldeveloper\bin\sdcli.exe" format input=sentencia.tmp output=sent_formateada.tmp'
Следующая команда прочитает /etc/passwd
и выведет username : home-dir
awk -F: '{print $1":" $6}' /etc/passwd
Вывод будет примерно таким:
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
games:/usr/games
Вы можете перенаправить вывод в файл, используя :
awk -F: '{print $1":" $6}' /etc/passwd > result.txt
In:
sudo -u joe ls ~
~
расширяется вашей оболочкой перед запуском команды (здесь sudo
), поэтому на самом деле выполняется:
sudo -u joe ls /home/me
Чтобы просмотреть содержимое joe домашний каталог
:
ls ~joe
Или, если у вас нет доступа для чтения к его домашнему каталогу:
sudo -u joe ls ~joe
Или для оболочки, работающей как joe
, чтобы расширить ~
:
sudo -u joe sh -c 'ls ~'
Обратите внимание, что кроме csh
/tcsh
/zsh
вы не можете использовать ls ~joe
подход, если имя пользователя находится в переменной. В зависимости от оболочки
user=joe
echo ~$user
выводит либо /home/mejoe
, либо ~joe
. В bash
если был пользователь с именем $user
(буквально), это возвращало его домашний каталог.
Здесь вам понадобится:
eval "ls ~$user"
(вы должны заранее убедиться, что $user
содержит допустимое имя пользователя).