Команда/синтаксис для указания имени динамического профиля в cygwin

Каков синтаксис для указания имени динамического профиля в команде linux? Например.

perl genhtml /home/$(usrProfile)/*

Каков синтаксис для замены usrProfile, если он динамический?

Спасибо.

РЕДАКТИРОВАТЬ: я запускаю это в командной строке Windows под cygwin.

ОБНОВЛЕНИЕ: я пытался сделать следующее:

$ECHO $HOME
chmod 444/home/~username/*

Но я получил сообщение об ошибке

No such file or directoryine 1: /home/Administrator
chmod: cannot access '/home/~username/*': No such file or directory

Единственный профиль, который у меня есть в домашнем каталоге cygwin, — «Администратор», поэтому каталог существует физически.

Моя цель - иметь возможность вызывать указанную выше команду, не беспокоясь об имени профиля, либо непосредственно в сценарии сборки (MsBuild), либо с помощью команды bash cygwin.

Спасибо.


person BeraCim    schedule 13.01.2010    source источник


Ответы (4)


$ echo $HOME
/home/username

Изменить:

В вашем обновлении я предполагаю, что вы не вводите знак доллара перед echo. Кроме того, я бы использовал строчные буквы для команд, даже если они работают под Cygwin - они не будут работать где-либо еще. После настройки разрешения должен быть пробел. Кроме того, я сомневаюсь, что в реальном имени пользователя есть тильда. И вы действительно уверены, что хотите вслепую установить для всех файлов одинаковое разрешение? Что делать, если есть существующие файлы?

echo $HOME
chmod 444 /home/username/*

То, что вы, вероятно, действительно хотите сделать, это что-то вроде:

chmod 444 "${HOME}"/your_app_dir/*

or

chmod 444 "${HOME}"/some_specific_file
person Dennis Williamson    schedule 13.01.2010
comment
@ Деннис: спасибо за беспокойство. У меня есть полный контроль над файлами и их каталогом, поэтому установка доступа к каталогу не является проблемой. Cygwin играет очень небольшую роль в том, над чем я работаю. Я использую его только для настройки разрешений и создания некоторых вещей с помощью Perl, поэтому я не думаю, что это окажет огромное влияние на приложение. - person BeraCim; 14.01.2010

~/ в начале пути указывает домашний каталог текущего пользователя. Вместо этого используйте ~username/, чтобы получить домашний каталог определенного пользователя.

person Ignacio Vazquez-Abrams    schedule 13.01.2010

$ user=somebody
$ echo ~$user
~somebody
$ eval echo ~$user
/home/somebody
$ getent passwd $user | cut -d: -f6
/home/somebody
$ ls $(getent passwd $user | cut -d: -f6)
...

Это будет работать, даже если домашний каталог пользователя установлен на что-то отличное от /home/$user.

person ephemient    schedule 13.01.2010

Вам нужны либо обратные кавычки, либо нотация $().

perl genhtml /home/`program args`/*

perl gethtml /home/$(program args)/*

В последних версиях Bash оба запускают program args и заменяют вывод программы в командную строку.

Обозначение с обратной кавычкой является классическим способом сделать это и будет работать в большинстве оболочек. $() более поздняя (хотя я думаю, что на данный момент она существует уже 10 лет). Нотация $() предпочтительнее, потому что ее легче вкладывать - prog1 $(prog2 $(prog3))

person R Samuel Klatchko    schedule 13.01.2010