[英]Option -l of exec shell command
您能否闡明exec
shell命令的-l
選項的用法。 我在exec ls | cat
時沒有發現任何差異exec ls | cat
exec ls | cat
和exec -l ls | cat
exec -l ls | cat
exec
的-l
選項在命令名稱的開頭添加-
。 例如:
exec -l diff | head
-diff: missing operand after '-diff'
-diff: Try '-diff --help' for more information.
注意diff
之前的-
處。
這一切的重點? 如果在啟動外殼程序的命令前有-
,它將作為登錄外殼程序。 來自man bash
:
登錄外殼是一個參數為零的第一個字符為-的外殼程序,或以--login選項開頭的外殼程序。
現在, man exec
指出:
如果提供了-l選項,則外殼程序在傳遞給command的第零個參數的開頭放置一個破折號。 這就是login(1)所做的。
因此exec -l bash
將bash
作為登錄shell運行。 為了測試這一點,我們可以使用登錄bash執行文件~/.bash_profile
的事實,因此:
$ cat ~/.bash_profile
#!/bin/sh
printf "I am a login shell!\n"
如果我啟動登錄bash,將執行命令printf "I am a login shell!\\n"
。 現在使用exec
進行測試:
$ exec bash
$
什么都沒有顯示,我們在非登錄外殼上。
$ exec -l bash
I am a login shell!
$
在這里,我們有一個登錄外殼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.