我正在使用openSUSE进行自动安装AutoYAST系统的工作,并且在一个小细节上遇到了困难。为了在用户的环境中设置相关的应用程序,我尝试将符号链接到/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>这个代码片段在自动安装的post阶段执行,它作为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>但是这只创建了到/usr/local/bin在~/bin的符号链接。所以我有点被困在这个..。有谁有主意吗?
发布于 2015-09-09 06:33:59
最后,我决定使用pacholik发布的命令来修复这个问题,因为我最初的尝试是过度设计的,因此没有必要。
ln -s /usr/local/bin/* ~/bin发布于 2015-09-08 11:41:30
您使用双引号来定义su命令,因此将立即计算$program。您希望在su执行命令时对其进行评估。用单引号代替:
su -c 'for program in `ls /usr/local/bin`; do ln -s /usr/local/bin/$program ~/bin/$program; done' <user>发布于 2015-09-09 13:51:19
您还可以使用cp -s在具有GNU的系统上创建符号链接(就像您的suse系统一样),这使您能够使用递归和cp的其他有趣选项。
https://stackoverflow.com/questions/32456697
复制相似问题