創建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
你爲什麼要這麼做? –
在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設置。當然,如果我打破了你的劇本,責任就在我身上解決它。 –
恐怕你們兩個都誤解了我的要求。我編輯了我的問題,希望能夠澄清事情。 – XJDHDR