2015-08-14 22 views
0

我最近從Linux切換到OSX。我使用控制檯重了,以前我能夠做的事情一樣如何讓OSX在選項之前接受位置參數?

ls ./dir -sgh 
cp ./file ./dir -Rf 

等。如果我錯過了一個選項,只需按向上就可以了。 OSX迫使我把選項參數之前,像這樣:

ls -sgh ./dir 
cp -Rf ./file ./dir 

此行爲是令人沮喪的,很容易有關選項忘記,你必須導航到線的beggining只是添加它。如果忘記一個選項,也很難添加另一個選項。

有沒有一種簡單的方法來解決這種行爲,並使其工作在Linux的方式?我想這涉及到替換默認程序如ls與一些同行。

+0

這由處理命令行參數的命令使用的任何庫來處理。這不是你可以配置的東西。 – chepner

+0

我知道我無法通過點擊某個複選框來修復它。我只是想知道我能做些什麼。 – adamziel

+2

理想?重新規劃你的習慣,使用嚴格符合POSIX標準的工具 - 那麼你將有習慣在任何地方工作,而不是(在這種情況下)只在GNU上工作。使柺杖永久保持意味着你需要拐杖。 –

回答

3

OS X的用戶空間是BSD,(過時的)GNU和蘋果公用程序的混合體。 如果希望您的實用程序的行爲與其Linux相同,您應該安裝整個GNU coreutils套件,如 Homebrew

一旦安裝自制軟件,只是用它來安裝的coreutils:

$ brew install coreutils 

編輯:我沒有更新我的$PATH個人,但情況因人而異。

如果外殼沒有找到家釀安裝的coreutils,確保/usr/local/bin(或自定義的路徑,如果是自制如此配置的)是前/usr/bin/bin$PATH

0

選項處理不是shell的功能。您需要爲每個單獨的實用程序修補參數處理邏輯。

或者,您可以安裝例如相應的GNU工具。它們與默認的* BSD實用程序不完全兼容,因此您無法替換系統二進制文件;但您可以安排您的PATH,以便本地安裝的版本更適合您的個人使用。 Homebrew是管理這個流行的。

在Bash中,ctrl-A跳轉到行首,M-n跳過第一個標記。

+0

我意識到這不是一個shell功能。我只是想知道是否有什麼我可以做的,以使其工作方式不同。我意識到解決方案可能涉及用其他的替換現有的'ls','cp'等二進制文件。 – adamziel

+0

剛纔看到更新。 – tripleee

1

在最好的情況下,所有程序動態鏈接系統libc並使用getopt來處理它們的參數。 getopt只查找參數,直到找到第一個非選項參數,然後停止。您無法更改getopt的此行爲。您必須將系統libc替換爲具有不同實施getopt的系統。

但是,並不保證所有程序動態加載libc;有些可能會靜態鏈接,在這種情況下,更換系統libc將不起作用。其他人甚至可能不使用getopt。在任何一種情況下,唯一的選擇是將程序替換爲您想要的方式。

相關問題