2016-07-23 70 views
1

創建Bash腳本時,我在開始定義PATH環境變量時一直有一條線。我最近發現,這不會使腳本非常便於使用,因爲對於不同版本的Linux,PATH變量是不同的(在我的情況下,我將腳本從Arch Linux移動到了Ubuntu並收到錯誤,因爲各種可執行文件並不相同地方)。將PATH環境變量導入到使用cron啓動的Bash腳本中

是否可以將登錄shell定義的PATH環境變量複製到當前的Bash腳本中?


編輯: 我看到我的問題已經引起導致一些思考,我想改變登錄shell的PATH環境變量有一個bash腳本,這是完全相反的一些困惑是什麼我想要。

這是我現在有在我的Bash腳本的一個頂部:

#!/bin/bash 
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl 
# Test if an internet connection is present 
wget -O /dev/null google.com 

我要替換的東西,第二行副本PATH登錄shell價值腳本環境:

#!/bin/bash 
PATH=$(command that copies value of PATH from login shell) 
# Test if an internet connection is present 
wget -O /dev/null google.com 

編輯2:對不起,我的這一重大遺漏。我忘了提到正在討論的腳本正在通過cron按計劃運行。 Cron創建它自己的環境來運行不使用登錄shell的環境變量或修改它們的腳本。我剛剛嘗試在cron中運行以下腳本:

#!/bin/bash 
echo $PATH >> /home/user/output.txt 

結果如下。正如你所看到的,由cron使用的PATH變量是登錄shell不同:

[email protected]_router:~$ cat output.txt 
/usr/bin:/bin 
[email protected]_router:~$ echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 
+3

你爲什麼要這麼做? –

+1

在Mac OS X上,'/ etc/profile'包含:'if [-x/usr/libexec/path_helper];然後評估'/ usr/libexec/path_helper -s'; fi'。這設置了'PATH'和'MANPATH'。您可以在U&L和SU上找到關於'path_helper'的問題 - 所提到的速度問題已經解決(少數 - 如10.11.6中的8-10毫秒)。在'/ etc/paths.d'中查找可能在Linux上?但問題在於 - 你爲什麼要修改PATH?我可能對我應該使用哪個版本的命令有自己的看法;這就是我的PATH設置。當然,如果我打破了你的劇本,責任就在我身上解決它。 –

+0

恐怕你們兩個都誤解了我的要求。我編輯了我的問題,希望能夠澄清事情。 – XJDHDR

回答

3

不要觸碰用戶的PATH可言,除非你有特殊原因。沒有做任何事情會(基本上)完成你所要求的。

因爲每個進程都自動繼承PATH和所有其他環境變量,所以您無需執行任何操作即可獲取用戶的正常PATH

如果你需要一些非標準添加到PATH,通常的做法是冠以(或附加)新的目錄到用戶現有的PATH,像這樣:

PATH=/opt/your/random/dir:$PATH 

cron工作環境是非常接近系統的「默認」(對於「默認」的一些定義),儘管交互式shell通常可以在較少約束的環境下運行。但是,再次解決這個問題的方法是在腳本的開頭添加缺失的目錄到當前值。添加這個特定系統上不存在的目錄是無害的,正如引入重複目錄一樣。

+0

您誤解了我的問題。我不想修改'PATH'環境變量。我想將該環境變量的值複製到腳本的環境中。 – XJDHDR

+0

我相信我完全理解你;如果你什麼都不做,你會繼承用戶的'PATH',在大多數情況下它將與系統默認的'PATH'相同,如果不是,用戶很可能有一個很好的理由來配置它。無論如何,沒有必要在整個系統範圍內設置默認值,儘管這是常見的做法,例如,在Linux上。如果您確實需要覆蓋用戶的配置偏好,我所描述的機制就是您應該做的,而不是您想要的。 – tripleee

+0

我已經編輯了我的問題。我剛剛意識到有一個我忘記提到的非常重要的信息。我非常抱歉。 – XJDHDR