ln命令在脚本和bash中执行的不同结果

sh/bash/dash/ksh/zsh等Shell脚本
回复
gududehuo
帖子: 92
注册时间: 2008-05-25 22:58

ln命令在脚本和bash中执行的不同结果

#1

帖子 gududehuo » 2009-02-05 22:36

sudo ln -v -f -s /home/pc/Desktop/updatetemp/* /var/cache/apt/archives/
这几句命令直接在bash中执行能创建/home/pc/Desktop/updatetemp/这个文件夹中的每个文件的链接,
但不过在脚本执行,就只能创建一个到/home/pc/Desktop/updatetemp/*的链接。
这是为什么,
上次由 gududehuo 在 2009-02-05 22:47,总共编辑 1 次。
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: ln命令在脚本和bash中执行的不同结果

#2

帖子 millenniumdark » 2009-02-05 22:45

腳本的shebang行是否指定的是bash?

估計你的默認shell是個不支持glob expansion的東東(dash?)
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: ln命令在脚本和bash中执行的不同结果

#3

帖子 aerofox » 2009-02-05 22:49

在脚本中是否有

代码: 全选

set -o noglob
这条命令?如果有这条命令,* 号就不会扩展了。
gududehuo
帖子: 92
注册时间: 2008-05-25 22:58

Re: ln命令在脚本和bash中执行的不同结果

#4

帖子 gududehuo » 2009-02-05 22:55

谢谢楼上两位提醒,
我知道原因了,我把这个命令放在gksudo中执行就发生了这样的错误 :em06 :em06 :em06
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: ln命令在脚本和bash中执行的不同结果

#5

帖子 millenniumdark » 2009-02-05 23:01

gududehuo 写了:谢谢楼上两位提醒,
我知道原因了,我把这个命令放在gksudo中执行就发生了这样的错误 :em06 :em06 :em06
gksudo是使用root的shell。而現代的ubuntu和debian的root shell默認是dash,不支持glob。

你可以把

#!/bin/sh

改成

#!/bin/bash

或者

#!/usr/bin/env bash
gududehuo
帖子: 92
注册时间: 2008-05-25 22:58

Re: ln命令在脚本和bash中执行的不同结果

#6

帖子 gududehuo » 2009-02-05 23:07

millenniumdark 写了:
你可以把

#!/bin/sh

改成

#!/bin/bash

或者

#!/usr/bin/env bash
在脚本中修改吗,
但我原来就是用#!/bin/bash,我想显示一个密码提示框,所以用了gksudo。
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: ln命令在脚本和bash中执行的不同结果

#7

帖子 millenniumdark » 2009-02-07 22:59

你的意思是在腳本裡這樣寫?

代码: 全选

#!/bin/bash

blah blah blah

gksudo ln -v -f -s /home/pc/Desktop/updatetemp/* /var/cache/apt/archives/

blah blah blah
gksudo是用於圖形界面的程序的啊,直接用在ln上估計會有問題。

具體也不知道到底是怎麼回事。
gududehuo
帖子: 92
注册时间: 2008-05-25 22:58

Re: ln命令在脚本和bash中执行的不同结果

#8

帖子 gududehuo » 2009-02-10 14:14

还是用
zenity --entry --hide-text --text="请输入密码"
echo $mima | sudo -S ln -v -f -s /home/pc/Desktop/updatetemp/* /var/cache/apt/archives/
还是这样舒服,又有了图形界面。
:em05 :em05

谢谢millenniumdark的解答
回复