執行shell script與subshell

兩種方法

  • 喚起新shell再執行shell scripts
  • 在目前shell執行shell scripts

喚起另一個shell來執行的scripts在scripts檔頭最前面前要加

      #! /bin/sh

第一種方法是在shell script 文字檔前指出shell scripts解讀的程式在那(也就是 我們的shell)然後把文字檔的執行權限打開,照一般執行可執行檔方式執行或者叫 一個shell來解釋文字檔test.sh。

      $ test.sh
      $ /bin/sh test.sh
      $ ( . test.sh; )
      $ exec test.sh

第二種方法是用命令‘‘.‘‘或者source執行。

      $ . test.sh
      $ source test.sh
      $ { test.sh; }
      $ eval ‘. test.sh‘

差別在於一些設定只有在這個shell下的才算數,而喚起另一個shell就是另一個 不相干的世界, 也就是用第一種方法執行的script中變數的設定,不會影響到原來的shell變數。 這個相當重要。ksh沒有source這個命令,所以最好不要用source。 中括號( )表示用另一個subshell大括號,{ }表示用目前shell。例如

      $ ( VAR=‘testvar‘; )
      $ echo $VAR

      $ { VAR=‘testvar‘; }
      $ echo $VAR
      testvar

只有{ }內的VAR中的值被設定。其中用 . 的方法要很小心, 不要在script裡面用

      $ . test.sh arg1 arg2

因為arg1 arg2會繼承呼叫這個script的arg1 arg2來,用 . 的方式最好是要執行 的script只是一團script library不帶參數。 另外如果 . test.sh執行,test.sh離開時,呼叫. test.sh的shell也跟著離開。

时间: 2024-11-03 22:37:02

執行shell script與subshell的相关文章

GitHub for Windows 內建 Git Shell 執行時顏色所代表的意義

在使用指令列版控的過程中,經常有機會用到 Git Shell 這套優異的 Git 版控環境,一來他使用 Windows PowerShell 為核心,其訊息顯示與輸入都支援 Unicode,比較不會有中文字集轉換的問題:二來輸入命令或分支名稱的時候還有 IntelliSense 功能協助,非常貼心的設計:三來在版控的過程中,可以看出當下工作目錄位於哪個分支上,這個提示也很棒:四來常會看到他透過顏色與一些特殊符號提示你目前工作目錄的狀態,但不特別看文件還真的不太容易知道它顏色代表的意義,因此特別撰

Unity strip engine code 遇到執行不能之問題與解決

遊戲發布在 WebGL 平台發現檔案還是太大,因此在 IL2CPP 的環境下,開啟 Strip engine code 編譯功能,嘗試看看能不能減少一些檔案容量. 但由於我們另外有載入 Scene stream assetbundles 的機制,因此遇到開啟 Strip engine code 後,無法正常執行的情形. 經過 Kelvin Lo 技術支援以及時間測試後,終究能夠正常執行,留下整件事情的經過.技術問題以及相關解法支援等等資料. 測試環境 Unity5.5.1f1,Windows 1

非靜態初始化塊與夠着函數的 執行順序

題目: 子類A繼承父類B,A a=new A();則父類B夠着函數.父類B靜態代碼塊.父類B非靜態代碼塊執行的先後順序是? 正確的執行順序是:杜磊B靜態代碼塊->子類A靜態代碼塊->父類B非靜態代碼塊->父類B構造函數->子類A非靜態代碼塊->子類A構造函數 也就是説非靜態初始化塊的執行順序要在構造函數之前. 1 class SuperClass{ 2 private static String str="Spuer Class Static Variable&qu

学习shell script

如果你的想要管理好你的主机,那么就要好好学习自动管理系统的有效工具--hell script!基本上,shell script有点像早期的批处理文件,即将很多命令整合起来一次执行,但是shell script拥有更强大的功能,它可以进行类似程序的编写,并且不需要经过编译就能够执行,非常方便我们对系统进行管理. 今天我们主要通过对一些shell script的习题来加深对脚本知识的学习. 习题1:对成绩进行判断,要求输入一个正整数,以60分,85分为界输出不同的评语. #!/bin/bash #

调试 shell script 方法

[email protected]:~$ cat b.sh#!/bin/bash dir=`pwd` dir=$dir'/' for f in `ls *.png` do echo $dir$f done 看每一行代码的执行: [email protected]:~$ bash -x b.sh ++ pwd + dir=/home/wade + dir=/home/wade/ ++ ls chrome_1407299385726.png chrome_1427299385726.png + fo

Shell Script 中 "$()" ," ${}" Learning

shell中$(( )) 与 $( ) 还有${ }的区别 http://blog.chinaunix.net/uid-14351756-id-2820651.html $( ) 与 ` ` (反引号) 在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换用(command substitution)的. 所谓的命令替换与我们第五章学过的变量替换差不多,都是用来重组命令行: * 完成引号里的命令行,然后将其结果替换出来,再重组命令行. 例如: [code]$ ech

shell script 的追踪与 debug

shell script 的追踪与 debug scripts 在运行之前,最怕的就是出现语法错误的问题了!那么我们如何 debug 呢?有没有办法不需要透过直接运行该 scripts 就可以来判断是否有问题呢?呵呵!当然是有的!我们就直接以 bash 的相关参数来进行判断吧! [[email protected] ~]# sh [-nvx] scripts.sh 选项与参数: -n :不要运行 script,仅查询语法的问题: -v :再运行 sccript 前,先将 scripts 的内容输

Shell编程之三 —— shell script 脚本(未完待续)

1.脚本的语法构成: shell script 是利用 shell 的功能所写的一个『程序(program)』,这个程序是使用纯文本文件(文件后缀名最好为sh文件,方便我们管理),将一些 shell 的语法与指令(含外部指令)写在里面, 搭通配符.配正规表示法.管线命令与数据流重定向.条件判断.循环逻辑等功能,以达到我们所想要的处理目的. 构成(常见):shell语法和外部指令   通配符     [a-z]  [A-Z]     ?    *          正规表达式      管线命令

shell script中的$*和[email protected]

在shell script中,$*和[email protected]都是获取所有的命令行参数,但是这两者在使用的过程中会有细微的差别,差别主要是在有没有使用双引号,即是直接使用$*,[email protected],还是使用"$*","[email protected]". 直接使用$*,[email protected] #!/bin/bash count=1 for param in $*;do echo "\$* Parameter #$coun