用于在cygwin中指定动态配置文件名称的命令/语法

时间:2010-01-13 05:02:01

标签: windows bash cygwin

在linux命令中指定动态配置文件名称的语法是什么? E.g。

perl genhtml /home/$(usrProfile)/*

如果usrProfile是动态的,那么替换usrProfile的语法是什么?

感谢。

编辑:我在cygwin下的Windows命令行中运行它。

更新:我尝试过以下操作:

$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主目录中的唯一配置文件是Administrator,因此该目录是物理存在的。

我的目标是能够直接在构建脚本(MsBuild)中或通过cygwin的bash命令调用上述命令而无需担心配置文件名称。

感谢。

4 个答案:

答案 0 :(得分:1)

$ echo $HOME
/home/username

修改

在您的更新中,我假设您没有在echo之前输入美元符号。此外,我会使用小写的命令,即使它们在Cygwin下工作 - 他们不会在其他地方。权限设置后需要有空格。另外,我怀疑实际用户名中有代字号。你真的确定要盲目地将所有文件设置为相同的权限吗?如果有现有文件怎么办?

echo $HOME
chmod 444 /home/username/*

您可能真正想做的事情更像是:

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

chmod 444 "${HOME}"/some_specific_file

答案 1 :(得分:0)

路径名开头的

~/指定当前用户的主目录。使用~username/来获取特定用户的主目录。

答案 2 :(得分:0)

$ 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以外的其他目录,这也会有效。

答案 3 :(得分:0)

您需要反引号或$()表示法。

perl genhtml /home/`program args`/*

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

在最近的Bash版本中,这两个版本都运行program args,并将程序的输出替换为命令行。

反引号符号是执行此操作的经典方法,适用于大多数shell。 $()是最近的(虽然我认为它已经存在了10年)。 $()表示法是首选,因为它更容易嵌套 - prog1 $(prog2 $(prog3))