我正在使用AutoYAST自动安装openSUSE系统,而且我在一个小细节上难以接受。为了在用户环境中设置相关应用程序,我尝试将符号链接到〜/ bin中位于/ usr / local / bin中的所有应用程序(所以说/ usr / local / bin有addr2line实用程序,然后我希望在〜/ bin中有一个符号链接。
我已尝试执行以下剪辑来完成此操作:
su -c "for program in `ls /usr/local/bin`; do ln -s /usr/local/bin/$program ~/bin/$program; done" <user>
此代码段在自动安装的后脚本阶段执行,该阶段以root身份执行(并且看到我希望符号链接的所有者是用户,此命令使用su执行)。
但是,这不起作用,并提供以下输出:
++ ls /usr/local/bin
+ su -c 'for program in addr2line
ar
as
c++
c++filt
cpp
elfedit
g++
gcc
gcc-ar
gcc-nm
gcc-ranlib
gcov
gprof
i686-pc-linux-gnu-c++
i686-pc-linux-gnu-g++
i686-pc-linux-gnu-gcc
i686-pc-linux-gnu-gcc-4.9.3
i686-pc-linux-gnu-gcc-ar
i686-pc-linux-gnu-gcc-nm
i686-pc-linux-gnu-gcc-ranlib
ld
ld.bfd
nm
objcopy
objdump
ranlib
readelf
size
strings
strip; do ln -s /usr/local/bin/ ~/bin/; done' <user>
bash: -c: line 1: syntax error near unexpected token `ar'
bash: -c: line 1: `ar'
我已尝试过该命令的几种变体,但似乎并不完全符合我的要求。
例如,我也尝试过:
su -c "for program in /usr/local/bin/*; do ln -s $program ~/bin/; done" <user>
但这只在〜/ bin中创建了一个符号链接到/ usr / local / bin。 所以我有点卡在这个......有人有想法吗?
答案 0 :(得分:2)
您使用双引号来定义su
命令,因此正在评估$program
。您希望在su
执行命令时对其进行评估。改为使用单引号:
su -c 'for program in `ls /usr/local/bin`; do ln -s /usr/local/bin/$program ~/bin/$program; done' <user>
答案 1 :(得分:1)
您还可以使用cp -s
在具有GNU cp的系统上创建符号链接(就像您的suse系统一样),这使您能够使用递归和其他有趣的cp选项。
答案 2 :(得分:0)
最后,我决定采用pacholik发布的命令来解决这个问题,因为我最初的尝试是过度设计的,因此没有必要。
ln -s /usr/local/bin/* ~/bin