在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命令调用上述命令而无需担心配置文件名称。
感谢。
答案 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))