linux shell 执行目录,bash shell脚本执行的几种方法

bash shell 脚本执行的方法有多种,本文作一个总结,供大家学习参考。

假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限。

方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:cd /data/shell

./hello.sh

./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。

方法二:以绝对路径的方式去执行bash shell脚本:

/data/shell/hello.sh

方法三:直接使用bash 或sh 来执行bash shell脚本:

cd /data/shell

bash hello.sh

cd /data/shell

sh hello.sh

注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了啊,呵呵……。

方法四:在当前的shell环境中执行bash shell脚本:

cd /data/shell

. hello.sh

cd /data/shell

source hello.sh

前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。

假设shell脚本文件为hello.sh

放在/root目录下。

下面介绍几种在终端执行shell脚本的方法:

复制代码 代码如下:

[root@localhost home]# cd /root/

[root@localhost ~]#vim hello.sh

#!  /bin/bash

cd /tmp

echo "hello guys!"

echo "welcome to my Blog:linuxboy.org!"

1.切换到shell脚本所在的目录,执行:

复制代码 代码如下:

[root@localhost ~]# ./hello.sh

-bash: ./ hello.sh: 权限不够

2.以绝对路径的方式执行:

复制代码 代码如下:

[root@localhost ~]# /root/Desktop/hello.sh

-bash: /root/Desktop/ hello.sh: 权限不够

3.直接用bash或sh执行:

复制代码 代码如下:

[root@localhost ~]# bash hello.sh

hello guys!

welcome to my Blog:linuxboy.org!

[root@localhost ~]# pwd

/root

[root@localhost ~]# sh hello.sh

hello guys!

welcome to my Blog:linuxboy.org!

[root@localhost ~]# pwd

/root

注意:用以上三种方法执行shell脚本,现行的shell会开启一个子shell环境,去执行shell脚本,前两种必须要有执行权限才能够执行。也可以让shell脚本在现行的shell中执行:

4.现行的shell中执行

复制代码 代码如下:

[root@localhost ~]# . hello.sh

hello guys!

welcome to my Blog:linuxboy.org!

[root@localhost tmp]# pwd

/tmp

[root@localhost ~]# source hello.sh

hello guys!

welcome to my Blog:linuxboy.org!

[root@localhost tmp]# pwd

/tmp

对于第4种不会创建子进程,而是在父进程中直接执行。

上面的差异是因为子进程不能改变父进程的执行环境,所以CD(内建命令,只有内建命令才可以改变shell 的执行环境)没有成功,但是第4种没有子进程,所以CD成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 源码--Arrays

前言 数组比较特殊,一个数组属于一个对象,但是它的创建方式却不同于一般对象。 Java中的数组创建数组有以下三种方式: // 第一种 int[] array new int[5]; // 第二种 int[] array {1, 2, 3, 4, 5}; // 第三种 int[] array new int[]{1,…

HashMap原理深入理解

hashing(哈希法)的概念 散列法(Hashing)是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快&#…

linux终端转到目录,linux下目录及终端学习

linux目录按调用分为相对路径与绝对路径相对路径:从当前路径下查找查找目标也可使用./调用当前目录下文件或者../调用上一层目录中文件,可通过pwd查看当前路径绝对路径:从根目录出发查找文件。执行cat /etc/passwd命令时由于引用绝对路径&…

HashMap的底层原理

一&#xff1a;HashMap的节点&#xff1a;HashMap是一个集合&#xff0c;键值对的集合,源码中每个节点用Node<K,V>表示 static class Node<K,V> implements Map.Entry<K,V> {final int hash;final K key;V value;Node<K,V> next;Node是一个内部类&…

linux 远程调试文件夹,GDB远程调试开发板程序

一、概述可能我们都熟悉直接在发行版linux系统下调试系统&#xff0c;只需要在安装系统的时候包含了调试工具&#xff0c;直接可以根据gdb进行调试。但对于很多做嵌入式的来说&#xff0c;可能经常需要调试运行在开发板上的应用程序&#xff0c;下面就来说说。先说一下我们的调…

linux必备工具,Linux装机必备工具

分类 名称 类比 说明压缩工具 RAR for Linux WinRAR Linux中压缩解压RAR格式文件的工具联络聊天 EVA QQ 一个界面、使用 类似QQ的聊天工具。MP3 播放 XMMS WinAmp Linux中MP3播放器下载工具 Downloader4X FlashGet Linux中的多线程下载利器流媒体播放 RealPlayer 10 RealPlaye…

hashMap 底层原理+LinkedHashMap 底层原理+常见面试题

1.源码 java1.7 hashMap 底层实现是数组链表 java1.8 对上面进行优化 数组链表红黑树 2.hashmap 是怎么保存数据的。 在hashmap 中有这样一个结构 Node implenets Map.entity{hashkeyvaluenext} 当我们向hashMap 中放入数据时&#xff0c;其实就是一个 Enity{keyvaue}在存之…

linux时间跳变影响,MONGO 集群 修改linux主机时间后的影响

生产环境是一主一从一仲裁3分片的集群&#xff0c;现在发现其中一个节点比当前时间大了好几天&#xff0c;后使用NTP将时间往回调整副本集上。原来时间是5月3日&#xff0c;当前是4月26日&#xff0c;对此进行了调整。[rootcwdtest1 bin]# dateFri May 3 13:20:31 CST 2019[ro…

Java容器解析——HashMap

前言 HashMap是一个散列表&#xff0c;它存储的内容是键值对(key-value)映射。 1 定义 public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable {}由HashMap定义可以看出 1&#xff09; HashMap<K,V>表示…

linux教程第五版第三章课后答案,linux 第三章 章习题.doc

填空题Linux_____可以理解为运行在_____之上&#xff0c;回避直接操作_____和配置文件的应用程序。在Linux中常见的两种图形环境是_____和______。在Linux中的配置文件为____和_____。在Fedor8.0中可以通过____窗口进行主题设置。在“自定义主题”对话框中可以对“控件”、“颜…

xp下添加linux启动项,grub.cfg--XP+ Ubuntu10.04双系统安装后无XP启动项

问题描述&#xff1a;Ubuntu 10.04发布了&#xff0c;随即裸机安装了Windows XP &#xff0c;然后用U盘启动盘安装了Ubuntu 10.04,安装速度飞快(不到10分钟吧)&#xff0c;但是装上后发现在grub启动项里没有XP&#xff0c;郁闷了&#xff0c;花了几分钟终于解决了&#xff0c;呵…

HashMap 源码详细分析(JDK1.8)

1. 概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap。HashMap 最早出现在 JDK 1.2中&#xff0c;底层基于散列算法实现。HashMap 允许 null 键和 null 值&#xff0c;在计算哈键的哈希值时&#xff0c;null 键哈希值为 0。HashMap 并不保证键值对的顺序&…

linux错误码61,Linux编程中的错误码列表

有时可以知道错误的数值&#xff0c;但是如果不知道对应于那个宏定义&#xff0c;也很难知道这个错误描述的是什么。我平时这两种方法来确定&#xff1a;在内核源码中搜索和查看头文件。 在内核源码中搜索一般都可以搜到&#xff0c;而且使用source insight的话也很方便&#x…

linux无限刷屏代码,linux下如何实现简单刷屏

今天为了测试我的LCD有没有坏点写了一个简单的刷屏程序&#xff0c;效果还不错&#xff0c;分析给大家。代码如下&#xff1a;#include #include #include #include #include #include #include #include int main(int argc,char *argv[]){int fbfd 0;struct fb_var_screeninf…

mvc:annotation-driven 注解的作用

1.自动注册映射处理器和适配器 这是该注解的主要功能&#xff0c;添加< mvc:annotation-driven/>注解后&#xff0c;容器中会<自动注册HandlerMapping与HandlerAdapter 两个bean。省去手动注册HandlerMapping和HandlerAdapter的步骤。 当配置了< mvc:annotation-…

linux主机熵值过小,tomcat在linux启动应用慢解决方式

问题&#xff1a;o.a.c.util.SessionIdGeneratorBase - Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [2,741] milliseconds原因&#xff1a;拿Tomcat /dev/random做关键词&#xff0c;一堆详细说明。建议看wiki。https://www.cnblogs.…

@Autowired注解能用在static属性吗?autowired注入static属性上为null

Autowired注解能用在static属性吗&#xff1f; 答案是否定的&#xff0c;我们来测试下&#xff1a; 日志信息已经很明确了&#xff0c;表示static不能被Autowired进行复制。为什么呢&#xff1f;我们现在就来一起了解其原因。 首先将我们的测试环境搭建好&#xff0c; Use…

linux下用c语言写黄金矿工,C语言写的黄金矿工O(∩_∩)O---初稿,能玩了

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼int main(void){initgr();go();getch();closegr();return 0;}void youxiye() /* 游戏页 */{setfillstyle(SOLID_FILL,15);bar(0,0,639,49);setfillstyle(SOLID_FILL,6);bar(0,49,639,349);setcolor(BLUE);line(0,49,638,49);setc…

Swagger介绍及使用

导语&#xff1a; 相信无论是前端还是后端开发&#xff0c;都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力&#xff0c;经常来不及更新。其实无论是前端调用后端&#xff0c;还是后端调用后端&…

linux 安装libcurl4-gnutls-dev,curl / curl.h,libcurl,libcurl4-openssl-dev,libcurl4-nss-dev库之间的区别?...

我有以下curl标题,我仍然可以安装上面提到的libcurl4包 –kafkaMetamorphosis:~$ll /usr/include/curl/total 200drwxr-xr-x 2 root root 4096 Jan 16 13:29 ./drwxr-xr-x 51 root root 20480 Jan 16 13:29 ../-rw-r--r-- 1 root root 7303 Dec 18 01:11 curlbuild.h-rw-r--r--…