首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在特定目录中创建符号链接

如何在特定目录中创建符号链接
EN

Stack Overflow用户
提问于 2015-09-08 11:32:11
回答 3查看 78关注 0票数 1

我正在使用openSUSE进行自动安装AutoYAST系统的工作,并且在一个小细节上遇到了困难。为了在用户的环境中设置相关的应用程序,我尝试将符号链接到/usr/local/bin中的所有应用程序中(所以说/usr/local/bin有addr2line实用程序,那么我想要一个指向~/bin中的应用程序的符号链接)。

为了实现这一点,我尝试执行以下代码片段:

代码语言:javascript
复制
su -c "for program in `ls /usr/local/bin`; do ln -s /usr/local/bin/$program ~/bin/$program; done" <user>

这个代码片段在自动安装的post阶段执行,它作为root执行(并且考虑到我希望符号链接的所有者是用户,这个命令是使用su执行的)。

但是,这不起作用,并给出了以下输出:

代码语言:javascript
复制
++ 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'

我尝试过命令的几个变体,但似乎都没有完全按照我的要求去做。

例如,我也尝试过:

代码语言:javascript
复制
su -c "for program in /usr/local/bin/*; do ln -s $program ~/bin/; done" <user>

但是这只创建了到/usr/local/bin在~/bin的符号链接。所以我有点被困在这个..。有谁有主意吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-09 06:33:59

最后,我决定使用pacholik发布的命令来修复这个问题,因为我最初的尝试是过度设计的,因此没有必要。

代码语言:javascript
复制
ln -s /usr/local/bin/* ~/bin
票数 0
EN

Stack Overflow用户

发布于 2015-09-08 11:41:30

您使用双引号来定义su命令,因此将立即计算$program。您希望在su执行命令时对其进行评估。用单引号代替:

代码语言:javascript
复制
su -c 'for program in `ls /usr/local/bin`; do ln -s /usr/local/bin/$program ~/bin/$program; done' <user>
票数 2
EN

Stack Overflow用户

发布于 2015-09-09 13:51:19

您还可以使用cp -s在具有GNU的系统上创建符号链接(就像您的suse系统一样),这使您能够使用递归和cp的其他有趣选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32456697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档