免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3646 | 回复: 12

[系统管理] 程序cd后不起作用 [复制链接]

论坛徽章:
0
发表于 2019-03-12 00:28 |显示全部楼层
文件名是jump,存放路径是/home,内容如下:

#!/bin/sh
if [[ $1 == "" ]];then
echo "no input"
elif [[$1 != ""]];then
echo "jump to /tmp and source .cshell"
cd /tmp && source .cshell
fi



运行:
%:jump
%:no input
%: jump dir
%:  jump: line 4: [[dir: command not found

目的是运行jump dir后,可以cd到/tmp目录,且source .cshell   

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
发表于 2019-03-12 08:48 |显示全部楼层
elif 里中括号少了空格。
如果 要在当前的shell进程里切换目录,应该 用source jump 来运行脚本。因为直接运行脚本 是在子shell进程里运行,相当于只在子进程里切换了目录 ,不会影响到父进程。

论坛徽章:
0
发表于 2019-03-12 13:58 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2019-03-14 13:41 |显示全部楼层
elif [[ $1 != "" ]];then
空格不能少

论坛徽章:
0
发表于 2019-03-14 23:21 |显示全部楼层
cfwyy 发表于 2019-03-12 08:48
elif 里中括号少了空格。如果 要在当前的shell进程里切换目录,应该 用source jump 来运行脚本。因为直接运 ...

嗯,谢谢提醒。


可以不用source吗?  因为我的用法是:jump dir,进入目录并source一个文件,如果改用source的话是不是要: source jump?那怎么确定是jump到dir呢?

另外有朋友提示可以用exec,也试过,好像不行。

以前在一家外包公司,他们就是直接用jump dir实现我上面说的功能,但是当时没有看源代码,不知道怎么实现的。

论坛徽章:
0
发表于 2019-03-14 23:26 |显示全部楼层
#!/bin/sh
if [[ $1 == "" ]]; then
echo "no input"
elif [[ $1 != "" ]]; then
echo "jump to dir"
cd /tmp && echo "jump ok"
fi


[a0003@as001 ~]$ pwd
/home/a0003
[a0003@as001 ~]$ ./test.sh
no input
[a0003@as001 ~]$ ./test.sh dir
jump to dir
jump ok
[a0003@as001 ~]$ pwd
/home/a0003
[a0003@as001 ~]$

论坛徽章:
0
发表于 2019-03-14 23:26 |显示全部楼层
本友会机友会摄友会 发表于 2019-03-12 13:58
powershell 没有 多了个空格,少了个空格就不行的问题。实际上,空格,tab,回车的组合,对powershell毫无 ...

朋友,谢谢了,不过回归正题,有办法实现我说的吗?谢谢

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
发表于 2019-03-15 08:13 |显示全部楼层
回复 5# minzyyl 为什么不行?,把你脚本的参数带上啊。
  1. soure jump dir
复制代码



论坛徽章:
0
发表于 2019-03-31 01:14 |显示全部楼层
cfwyy 发表于 2019-03-15 08:13
回复 5# minzyyl 为什么不行?,把你脚本的参数带上啊。

[asa@001 ~]$ pwd
/home/asa
[asa@001 ~]$ ./test.sh
no input
[asa@001 ~]$ source test.sh dir
if: Expression Syntax.
[asa@001 ~]$ more test.sh
#!/bin/sh
if [[ $1 == "" ]]; then
echo "no input"
elif [[ $1 != "" ]]; then
echo "jump to dir"
cd /tmp $$ echo "jump ok"
fi

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
发表于 2019-04-01 10:35 |显示全部楼层
回复 9# minzyyl

source用法应该是没问题的,你脚本的写的时候 空格什么的要注意一下,有提示你if 语法错误。我用你的改了下,运行是没问题的。
  1. deb@debian:~/桌面$ pwd
  2. /home/deb/桌面
  3. deb@debian:~/桌面$ cat test.sh
  4. #!/bin/sh

  5. if [[ $1 == "" ]];then
  6.         echo "no input"
  7. elif [[ $1 != "" ]];then
  8.         echo "jump to dir"
  9.         cd /tmp
  10.     echo "jump ok"
  11. fi
  12. deb@debian:~/桌面$ source test.sh 123
  13. jump to dir
  14. jump ok
  15. deb@debian:/tmp$ pwd
  16. /tmp
  17. deb@debian:/tmp$
复制代码


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP