我正在開發一系列命令列來在 Linux 系統上創建檔案、設定變數等。我不知道在執行程序中實際會使用哪個 shell,但我知道它將是 csh、tcsh、sh、ksh 或 bash 之一。
csh 和 tcsh 不兼容 bourne 是我此時的主要問題,因為它們使用不同的命令/語法來設定變數和條件運算式。
如果可以安全地假設它存在,我可以簡單地創建一個帶有 shebang 的 shell 腳本來切換到 /bin/sh。
因此我想知道:假設 sh 已安裝并可用是否安全,或者是否有另一種更優雅的方式來處理不同的 shell 樣式而不創建單獨的腳本?
uj5u.com熱心網友回復:
可以安全地假設sh在 POSIX 兼容系統中有一個,但它的路徑可能會有所不同。Open Group 規范說要確定標準 sh 實用程式的位置:
command -v sh
因此,您可以執行以下操作:
"`command -v sh`" <<EOS
echo my super sh script
EOS
但是有一個問題:csh 不支持參考的heredocs,這會讓撰寫腳本的程序變得非常痛苦。
當您以 Linux 為目標時,您可以直接撰寫sh腳本并使用 shebang#!/bin/sh或#!/usr/bin/env sh.
請注意,腳本中設定的變數對父 shell 不可用。對于您需要source的腳本,在這種情況下,語法會事,你得寫至少兩個sh與csh它的版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/406093.html
標籤:
上一篇:如何從我的makefile中的另一個檔案加載環境變數?
下一篇:包含git的搜索手冊
