不加./就能运行当前目录下的某个脚本(csh脚本)

sh/bash/dash/ksh/zsh等Shell脚本
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
送出感谢: 0
接收感谢: 0
联系:

不加./就能运行当前目录下的某个脚本(csh脚本)

#1

帖子 cavalier » 2008-10-30 20:28

我的系统是ubuntu8.04,默认shell是bash,出于需要也安装了csh,tcsh。我需要运行当前目录下csh脚本时不添加./就能运行!(即在终端中cd到脚本所在目录,然后输入脚本名称就能运行脚本,而不是输入./脚本名称)
注:
实验室师兄们已经解决了此问题,但由于他们忘记了处理办法,而且我们所用系统不同(他们用的是scientific linux)。所以只有求助大家了!
QQ:156128352

解决方案:
10楼兄弟提供—— 用bash,写到~/.bashrc里;用csh,写到~/.cshrc里。
写的内容是:
代码:
.bashrc: export PATH=".:$PATH"
.cshrc: setenv PATH ".:$PATH"
source一下,或者重新打开term。你的输出说明根本没有完成添加路径的操作。

附:我解决问题所用的从网络上搜到的参考资料
在 Ubuntu 系统中有两种设置环境变量 PATH 的方法。第一种适用于为单一用户设置 PATH,第二种是为全局设置 PATH。
第一种方法:
在用户主目录下有一个 .bashrc 文件,可以在此文件中加入 PATH 的设置如下:
export PATH=”$PATH:/your path1/:/your path2/…..”
注意:每一个 path 之间要用 “:“ 分隔。
注销重启 X 就可以了。
第二种方法:
在 /etc/profile中增加。
PATH="$PATH:/home/zhengb66/bin"
export PATH
如果要使得计时生效,使用 source 命令
source .bashrc
上次由 cavalier 在 2008-10-31 21:07,总共编辑 3 次。
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

Re: 不加./就运行当前目录下的某个脚本

#2

帖子 bones7456 » 2008-10-30 22:04

PATH环境变量里面加 "."
不推荐这么干
关注我的blog: ε==3
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
送出感谢: 0
接收感谢: 0
联系:

Re: 不加./就运行当前目录下的某个脚本

#3

帖子 cavalier » 2008-10-31 12:06

bones7456 写了:PATH环境变量里面加 "."
不推荐这么干

加了也还是不对,我是这么做的,有什么不对敬请指点。
xlianw@xlianw-desktop:~$ sudo -i
[sudo] password for xlianw:
root@xlianw-desktop:~# cd /etc
root@xlianw-desktop:/etc# ls

ConsoleKit ggi pam.conf
NetworkManager gimp pam.d
PolicyKit gnome pango
X11 gnome-app-install papersize
acpi gnome-system-tools passwd
adduser.conf gnome-vfs-2.0 passwd-
adjtime gnome-vfs-mime-magic pcmcia
aliases gre.d perl
alternatives groff pm
anacrontab group pnm2ppa.conf
apm group- popularity-contest.conf
apparmor grub.d power
apparmor.d gshadow ppp
apport gshadow- profile
apt gtk-2.0 profile.d
at.deny hal protocols
avahi hdparm.conf pulse
bash.bashrc hesiod.conf purple
bash_completion host.conf python
bash_completion.d hostname python2.5
belocs hosts qt3
bindresvport.blacklist hosts.allow rc.local
blkid.tab hosts.deny rc0.d
blkid.tab.old hp rc1.d
bluetooth hwtest.d rc2.d
bogofilter.cf init.d rc3.d
bonobo-activation initramfs-tools rc4.d
brlapi.key inputrc rc5.d
brltty iproute2 rc6.d
brltty.conf issue rcS.d
ca-certificates.conf issue.net readahead
calendar kde3 resolv.conf
chatscripts kernel-img.conf resolvconf
compizconfig laptop-mode rmt
complete.tcsh ld.so.cache rpc
console-setup ld.so.conf samba
console-tools ld.so.conf.d sane.d
cron.d ldap scim
cron.daily lftp.conf screenrc
cron.hourly libao.conf scrollkeeper.conf
cron.monthly libpaper.d securetty
cron.weekly locale.alias security
crontab localtime services
csh logcheck sgml
csh.cshrc login.defs shadow
csh.login logrotate.conf shadow-
csh.logout logrotate.d shells
cups lsb-base skel
dbus-1 lsb-base-logging.sh sound
debconf.conf lsb-release ssh
debian_version ltrace.conf ssl
default magic sudoers
defoma magic.mime sysctl.conf
deluser.conf mailcap syslog.conf
depmod.d mailcap.order terminfo
devfs manpath.config thunderbird
dhcp3 mediaprm timezone
dictionaries-common menu-methods ucf.conf
dm mime.types udev
doc-base mke2fs.conf ufw
dpkg modprobe.d uniconf.conf
e2fsck.conf modules update-manager
emacs modutils update-notifier
environment mono updatedb.conf
esound motd usplash.conf
event.d motd.tail vga
fdmount.conf mplayer vim
firefox-3.0 mtab w3m
fonts nanorc wgetrc
foomatic netscsid.conf wodim.conf
fstab network wpa_supplicant
fuse.conf networks wvdial.conf
gai.conf nsswitch.conf xdg
gamin openalrc xml
gconf openoffice xulrunner-1.9
gdm opt zsh_command_not_found
root@xlianw-desktop:/etc# cd skel
root@xlianw-desktop:/etc/skel# ls

Examples
root@xlianw-desktop:/etc/skel# ls -a
. .. .bash_logout .bashrc .profile .profile~ Examples
root@xlianw-desktop:/etc/skel# gedit .profile
profile内容:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi


修改: PATH=".:$HOME/bin:$PATH"


root@xlianw-desktop:/etc/skel# cd
root@xlianw-desktop:~# exit

logout
xlianw@xlianw-desktop:~$ ls -a
. .gconf .mcoprc .sudo_as_admin_successful
.. .gconfd .metacity .themes
.adobe .gimp-2.4 .mozilla .thumbnails
.bash_history .gksu.lock .mplayer .transmission
.bash_logout .gnome2 .nautilus .update-manager-core
.bashrc .gnome2_private .openoffice.org2 .update-notifier
.cache .gnupg .profile .wapi
.chewing .gstreamer-0.10 .profile~ .Xauthority
.config .gtk-bookmarks .profile_back .xinput.d
Desktop .gvfs .pulse .xsession-errors
.dmrc .ICEauthority .pulse-cookie 公共的
Documents.odt .icons .purple 模板
.esd_auth job .qt 视频
.eva .kde .recently-used 图片
.evolution .local .recently-used.xbel 文档
Examples .macromedia .scim 音乐
.fontconfig .mcop .ssh 桌面
xlianw@xlianw-desktop:~$ gedit .profile
(原内容和修改均和/etc/skel/.profile相同)

修改后重启执行结果:
xlianw@xlianw-desktop:~$ ls
Desktop Examples 公共的 视频 文档 桌面
Documents.odt job 模板 图片 音乐
xlianw@xlianw-desktop:~$ cd job
xlianw@xlianw-desktop:~/job$ ls

bfvcc-cyy.tgz bfvcc.tar feng-bfvcc feng-bfvcc.tgz t
xlianw@xlianw-desktop:~/job$ cd feng-bfvcc/
xlianw@xlianw-desktop:~/job/feng-bfvcc$ ls

bin clean Makefile package run setup src store work
xlianw@xlianw-desktop:~/job/feng-bfvcc$ cd run
xlianw@xlianw-desktop:~/job/feng-bfvcc/run$ ls

bfvcc.s linalg.s static.s tot_rr.s tt.s vpola.s
dcs.s multipole.s sumpot.s tot_vib.s tune.s wlam.s

xlianw@xlianw-desktop:~/job/feng-bfvcc/run$ bfvcc.s
bash: bfvcc.s:找不到命令
xlianw@xlianw-desktop:~/job/feng-bfvcc/run$ ./bfvcc.s
(说明:能运行)
xlianw@xlianw-desktop:~/job/feng-bfvcc/run$ csh
xlianw-desktop:~/job/feng-bfvcc/run> ls

bfvcc.s linalg.s static.s tot_rr.s tt.s vpola.s
dcs.s multipole.s sumpot.s tot_vib.s tune.s wlam.s
xlianw-desktop:~/job/feng-bfvcc/run> bfvcc.s
bfvcc.s: Command not found.
xlianw-desktop:~/job/feng-bfvcc/run> ./bfvcc.s
(说明:能运行)
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京
送出感谢: 0
接收感谢: 2 次

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#4

帖子 aBiNg » 2008-10-31 15:08

要bash读取就修改~/.bashrc而不是~/.profile,因为你是非login shell。详情google一下吧。:)
csh与bash类似,即~/.cshrc。
程序文件要有可执行权限。

另:你想让新用户也能实现你的这一要求(不要./就能执行),才需要去改skel。

PS:很高兴看到你实验室的师兄弟都能用Linux。:D
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
送出感谢: 0
接收感谢: 0
联系:

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#5

帖子 cavalier » 2008-10-31 15:28

aBiNg 写了:要bash读取就修改~/.bashrc而不是~/.profile,因为你是非login shell。详情google一下吧。:)
csh与bash类似,即~/.cshrc。
程序文件要有可执行权限。

另:你想让新用户也能实现你的这一要求(不要./就能执行),才需要去改skel。

PS:很高兴看到你实验室的师兄弟都能用Linux。:D


谢谢回答,但你的回答对于解决问题........
希望能和你认真交流!
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#6

帖子 bones7456 » 2008-10-31 15:33

你怎么一堆看着晕啊,啥都别说了, echo $PATH 看看有没有"."就行了
关注我的blog: ε==3
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
送出感谢: 0
接收感谢: 0
联系:

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#7

帖子 cavalier » 2008-10-31 15:52

bones7456 写了:你怎么一堆看着晕啊,啥都别说了, echo $PATH 看看有没有"."就行了


xlianw-desktop:~> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

如何实现你所说的?(把当前目录添加到环境变量?)
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#8

帖子 xiooli » 2008-10-31 16:10

cavalier 写了:
bones7456 写了:你怎么一堆看着晕啊,啥都别说了, echo $PATH 看看有没有"."就行了


xlianw-desktop:~> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

如何实现你所说的?(把当前目录添加到环境变量?)

骨头的意思大概是将/etc/environment 的那行改成:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:.

不知是不是。
头像
zhan
帖子: 1880
注册时间: 2005-08-15 0:04
来自: 南7技校
送出感谢: 0
接收感谢: 0
联系:

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#9

帖子 zhan » 2008-10-31 16:23

。。。。 不晓得听谁说的, 竟然去改 .profile 。。。

改 .bashrc 就是了,具体的 man bash 一下来看它启动的时候是如何读取配置文件的。

另,这个方法是不推荐的,以后如果出了问题,责任自负哦。
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京
送出感谢: 0
接收感谢: 2 次

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#10

帖子 aBiNg » 2008-10-31 16:27

xiooli, 不是。那里是root设置环境变量的一种方式。

cavalier, 用bash,写到~/.bashrc里;用csh,写到~/.cshrc里。
写的内容是:

代码: 全选

.bashrc: export PATH=".:$PATH"
.cshrc: setenv PATH ".:$PATH"

source一下,或者重新打开term。你的输出说明根本没有完成添加路径的操作。
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
送出感谢: 0
接收感谢: 0
联系:

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#11

帖子 cavalier » 2008-10-31 21:00

aBiNg 写了:xiooli, 不是。那里是root设置环境变量的一种方式。

cavalier, 用bash,写到~/.bashrc里;用csh,写到~/.cshrc里。
写的内容是:

代码: 全选

.bashrc: export PATH=".:$PATH"
.cshrc: setenv PATH ".:$PATH"

source一下,或者重新打开term。你的输出说明根本没有完成添加路径的操作。


谢谢,此方法有效! :em50

又问:

代码: 全选

.cshrc: setenv PATH ".:$PATH"
中的PATH后没有等号吗?恕我对系统这反面的知识了解不多,能否推荐一些关于这方面的经典书籍?
上次由 cavalier 在 2008-10-31 21:14,总共编辑 1 次。
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#12

帖子 xiooli » 2008-10-31 21:13

aBiNg 写了:xiooli, 不是。那里是root设置环境变量的一种方式。

cavalier, 用bash,写到~/.bashrc里;用csh,写到~/.cshrc里。
写的内容是:

代码: 全选

.bashrc: export PATH=".:$PATH"
.cshrc: setenv PATH ".:$PATH"

source一下,或者重新打开term。你的输出说明根本没有完成添加路径的操作。

呵呵,桌面linux一般就只有一个用户嘛,全局的和个人的也差不多啦。不过貌似这样不太安全还是怎么的,不太清楚具体的讲究 :em03
winneter
帖子: 62
注册时间: 2007-06-27 14:42
送出感谢: 0
接收感谢: 0

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#13

帖子 winneter » 2008-10-31 21:42

不用./确实不好,可以想象:有个人很坏,他在一个写了一个脚本里面是rm -rf / ,然后脚本的名字叫ls,这样超级用户进入这个目录ls一下就有得好看了。
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京
送出感谢: 0
接收感谢: 2 次

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#14

帖子 aBiNg » 2008-10-31 22:17

xiooli, Ub默认的users在admin组,所以修改/etc/environment应该对users有影响。但如果users只在users组里的话,对environment修改的变量将不会对他产生影响。

要不,你测试一下,然后给个详细的说明和结论吧。:D
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 不加./就能运行当前目录下的某个脚本(csh脚本)

#15

帖子 xiooli » 2008-10-31 22:57

aBiNg 写了:xiooli, Ub默认的users在admin组,所以修改/etc/environment应该对users有影响。但如果users只在users组里的话,对environment修改的变量将不会对他产生影响。

要不,你测试一下,然后给个详细的说明和结论吧。:D

我创建了一个叫test的用户试了下,是可以的阿(在桌面弄了个小脚本,赋予可执行权限,然后cd到该目录,直接运行之,没加./结果正确运行了。)
ps:不知道adm组和admin组有什么区别,以下是一些信息:

代码: 全选

test@XIOOLI:~/Desktop$ id test 
uid=1001(test) gid=1001(test) 组=1001(test),4(adm),20(dialout),21(fax),24(cdrom),25(floppy),26(tape),29(audio),30(dip),44(video),46(plugdev),105(scanner),107(fuse)
test@XIOOLI:~/Desktop$ id xiooli
uid=1000(xiooli) gid=1000(xiooli) 组=1000(xiooli),4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),107(fuse),113(lpadmin),114(admin)
test@XIOOLI:~/Desktop$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:."
CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun
回复

回到 “Shell脚本”