1. 程式人生 > >su -c命令與環境變數的困惑

su -c命令與環境變數的困惑

http://bbs.chinaunix.net/thread-2003718-1-1.html

[[email protected] ~]# su - oracle

    [[email protected] ~]$ $ORACLE_HOME/a.sh
    this is a.sh
    [[email protected] ~]$ 

上面的命令都正常,但是下面的命令則無法執行:
    [[email protected] ~]# su - oracle -c "$ORACLE_HOME/a.sh"
    -bash: /a.sh: 沒有那個檔案或目錄
    [[email protected]
~]#


下面的命令也沒問題:
    [[email protected] ~]# su - oracle -c "ls $ORACLE_HOME"
       admin             Disk3    oraInventory    ra_createdb.log     ra_idx01.dbf     ra.sql       
       ship_9204_linux_disk1.cpio.gz
       createrauser.sql  doc      oui             ra_createtable.log  ra_initData.log  scgs_ca.dmp  

       ship_9204_linux_disk2.cpio.gz
       Disk1             jre      procedurel.log  ra_data01.dbf       ra_rbs01.dbf     scgs_km.dmp   
       ship_9204_linux_disk3.cpio.gz
       Disk2             oradata  product         ra_data02.dbf       ra_scgs.dmp      scgs_ra.dmp  temp01.dbf

[[email protected] ~]# 

命令su - oracle -c "$ORACLE_HOME/a.sh"是在當前的Shell下執行的,因為root shell下面沒有定義ORACLE_HOME,所以上面命令相當於su - oracle -c "/a.sh"

su - oracle -c "ls $ORACLE_HOME"中的命令 ls $ORACLE_HOME是切換到oracle使用者環境下執行的,所以沒問題。


整條命令su - oracle -c "$ORACLE_HOME/a.sh"是你在root的shell下敲的,
所以命令裡面變數$ORACLE_HOME被替換成值,就成了su - oracle -c "/a.sh"
就是-c 後面跟著的字串在傳遞給oracle前已經被處理過了,已經變成了"/a.sh";
你第二條命令裡oracle使用者執行的也不是 ls $ORACLE_HOME,其實執行的命令是ls,顯示的是oracle使用者主目錄下的東東
不信你可以把oracle profile裡的ORACLE_HOME改為/tmp試一下,命令su - oracle -c "ls $ORACLE_HOME"顯示的內容和現在
一樣,不會是/tmp下的內容

相關推薦

su -c命令環境變數困惑

http://bbs.chinaunix.net/thread-2003718-1-1.html [[email protected] ~]# su - oracle     [[email protected] ~]$ $ORACLE_HOME/a.s

MinGW安裝環境變數配置和Sublime Text 3搭建C++編譯環境

一.MinGW在Windows中的安裝與配置:MinGWMinGW(Minimalist GNU For Windows)是個精簡的Windows平臺C/C++、ADA及Fortran編譯器,相比Cyg

WIn10 JDK安裝環境變數配置以及javac不是內部或外部命令問題的解決

一、安裝JDK 選擇安裝目錄 安裝過程中會出現兩次 安裝提示 。第一次是安裝 jdk ,第二次是安裝 jre 。建議兩個都安裝在同一個java資料夾中的不同資料夾中。1.安裝jdk 隨意選擇目錄 只需把預設安裝目錄 \java 之前的目錄修改即可2.安裝jre→更改→ \ja

df 和 du 命令詳解環境變數

指令 df 可以顯示目前所有檔案系統的最大可用空間及使用情形,請看下列這個例子: # df -h Filesystem       Size      Used     Avail Capacity    Mounted on /dev/ad0s1a      1.9G      389M      1.4G

Windows下JDK的安裝環境變數的配置教程(附詳細圖解)

JDK安裝配置教程 一、下載jdk 1.首先要確定自己電腦的作業系統是多少位的: 右鍵“我的電腦”>>選擇“屬性”>>系統型別(如下圖,我的是win7 64位) 2.然後到官網下載適合自己電腦版本的jdk。 官網連結:http://www.oracle.

CentOS 管道符、重定向環境變數

CentOS 管道符、重定向與環境變數 1. 輸入輸出重定向 2. 管道命令符 3. 命令列的萬用字元 4. 常用的轉義字元 5. 重要的環境變數 1. 輸入輸出重定向 檔案讀寫操作有關的重定向

Java詳解(2)--JDK安裝環境變數配置

JDK安裝與環境變數配置 ---------------------  作者:文動天下 來源:CSDN  連結:https://blog.csdn.net/li_yi_kun?t=1 版權宣告:本文為博主原創文章,轉載請附上博文連結! 1、JDK&nb

普通使用者可以執行,sudo提示command not found的問題分析——修改sudo命令環境變數

以下所有操作均在Centos6.10上進行 今兒在一臺新虛擬機器上安裝pip之後,用pip安裝包,需要root許可權,但執行sudo pip就提示command not found 經過查閱資料發現,出於安全方面的考慮,使用sudo執行命令將在一個最小化的環境中執行,環境變數都重置成預設狀態

使用setx 命令新增環境變數(Windows)

背景 用GUI的方法可能新增環境變數可能會比較麻煩,為此可採用命令列操作的方式。 步驟 以管理員身份執行 cmd 輸入 setx \M "path" "%path%[new_path];"。其中\M開關表示新增系統變數,由於%path%` 本身是系統變數和使用者變數拼起來的,不能用此方法新增使用者

cl編譯C檔案的環境變數修改

添 加環境 變數INCLUDEC:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include LIBC:\Progr

[Java配置]JDK安裝環境變數配置

➤ 安裝        安裝JDK 選擇安裝目錄 安裝過程中會出現兩次 安裝提示 。第一次是安裝 jdk ,第二次是安裝 jre 。建議兩個都安裝在同一個java資料夾中的不同資料夾中。(不能都安裝在java資料夾的根目錄下,jdk和jre安裝在

【Windows】JDK安裝環境變數配置

 【Windows】JDK安裝與環境變數配置   參考: https://www.cnblogs.com/smyhvae/p/3788534.html http://www.cnblogs.com/liuhongfeng/p/4177568.html --------------

2.命令型別 環境變數 快取 時間

1.命令型別: 檢視命令型別 1.shell內建命令 2.外部命令,在某一目錄下有一個和命令相應的可執行程式 command:type+命令名 type history 顯示命令型別,是內建還是外部 2.環境變數: 用於指定作業系統執行環境引數的一些變數PATH

Windows下的Python安裝環境變數的配置

Windows下的Python安裝與環境變數的配置 第一步:python下載:            Python安裝包下載地址:http://www.python.org/       第二步:python安裝:     雙擊下載

Java基礎(1)JDK的安裝環境變數配置

最近在複習Java基礎,第一課就是JDK的安裝配置以及環境變數的配置,不多廢話,直接開始吧 (1)去Oracle官方網站下載JDK 1.8     Java的歷史想必大家也清楚,Sun公司開發的一門面向物件的程式語言,後來Sun公司被Oracle收購,於是Java也理所當然的成了Oracle的

管道符、重定向環境變數

一、重定向 輸入重定向是把檔案匯入到命令中去,輸出重定向是把原本要輸出到螢幕的資料資訊寫入到指定檔案中去。一般,我們使用輸出重定向的頻率更高。 標準輸入重定向 :(STDIN,檔案描述符為0)預設從鍵盤輸入,也可從其他檔案或命令中輸入 標準輸出重

java安裝環境變數配置

1.開啟360安全瀏覽器,百度搜索JDK下載 2.順序點選進入下載頁面 3.選擇對應的系統進行下載 4.開始下載 5.如圖所示則是安裝包已下載好可以開始安裝JDK了 6.安裝時只需要按照提示一直點選”下一步”直到最後單擊“關閉”就好了,注意:在這個安裝

VSCode的Python擴充套件下程式執行的幾種方式環境變數管理

在VSCode中編寫Python程式時,由於有些地方要使用環境變數,但是發現設定的環境變數有時不起作用,花了點時間研究了一下,過程不表,直接說結論。 首先,環境變數的設定,Python擴充套件中有三種方式: 直接設定系統環境變數,或在使用命令列啟動VSCode時臨時先設定環境變數。這種方式設定的環境變

JDK安裝環境變數配置

安裝JDK 選擇安裝目錄 安裝過程中會出現兩次 安裝提示 。第一次是安裝 jdk ,第二次是安裝 jre 。建議兩個都安裝在同一個java資料夾中的不同資料夾中。(不能都安裝在java資料夾的根目錄下,jdk和jre安裝在同一資料夾會出錯) 如下圖所示 1:安

Linux基本知識29:重定向、管道符環境變數

1 重定向 重定向技術的5中模式: 標準覆蓋輸出重定向。 標準追加輸出重定向。 錯誤覆蓋輸出重定向。 錯誤追加輸出重定向。 輸入重定向。 1.1輸入輸出重定向 (1)輸入重定向是指把檔案匯入到命令中; (2)輸出重定向則是指把原本要輸出到螢幕的資料資訊寫入到