2012-08-31 160 views
3

是否有像〜這樣的特殊路徑前綴,表示「在PATH中隨處搜索」?我知道這是隻提供可執行基本名稱時的默認行爲,但具有像a = b這樣奇特的可執行文件名稱,我只能使用路徑調用它,無論是完整的還是相對的,如./a=b。如果我只提供basename a = b,bash會將其解釋爲變量賦值。PATH路徑前綴

+0

像這樣命名您的可執行文件在一般情況下顯然不是一個好主意。 – tripleee

+0

但考慮到命令可能具有看起來像句法實體的奇怪名稱,這是一個有效的問題。 ''''僞裝成'/ usr/bin/test'。 – Jens

回答

3

沒有這樣的前綴。如果您的唯一目的是執行帶有「奇怪」字符的文件名,則不需要它:引用這些字符,例如'a=b'a\=b。然後,bash的解析和擴展會導致您的命令的第一個單詞是a=b,它會像其他任何命令名一樣在路徑中查找。

如果要查找路徑中的程序但不執行該程序,請使用command -v。 (還有其他內置的效果相同,command -v具有便攜的優點(這是一個bash內置的,它在POSIX中)。不要使用which,它是一個外部命令,不可靠且不便攜。)

If你想查找包含a=ball the directories in the path,你可以使用type -a

type -aP a=b 
+0

感謝您的見解。迄今爲止,我認爲最好的答案。 –

4

它不完全是一個前綴,但引用可執行文件名稱(如'a=b')在我的PATH中找到它。 (猛砸3.2.17)

+0

這對我也適用。 Bash 4.2.24 – Adam

0

我個人使用引號,但另一種可能是:

(exec a=b) 
1

command內置正好爲此目的而設計,即尋找一個命令(不是別名,也不是一個函數)。

command a=b 

應該這樣做。從bash的手冊:

command [-pVv] command [arg ...] 
      Run command with args suppressing the normal shell function 
      lookup. Only builtin commands or commands found in the PATH are 
      executed. If the -p option is given, the search for command is 
      performed using a default value for PATH that is guaranteed to 
      find all of the standard utilities. If either the -V or -v option 
      is supplied, a description of command is printed. The -v option 
      causes a single word indicating the command or file name used to 
      invoke command to be displayed; the -V option produces a more ver‐ 
      bose description. If the -V or -v option is supplied, the exit 
      status is 0 if command was found, and 1 if not. If neither option 
      is supplied and an error occurred or command cannot be found, the 
      exit status is 127. Otherwise, the exit status of the command 
      builtin is the exit status of command.