[求救] 命令列下切換常用子目錄

看板MAC作者 (吹笛牧童)時間10年前 (2015/06/27 11:21), 10年前編輯推噓8(8011)
留言19則, 5人參與, 最新討論串1/1
如題,命令列下切換常用子目錄 從前 dos 時代是有人出過這種小工具的,所以有這需求似乎不用交代 我的狀況是公司的專案,放置的子目錄深度很深 目前的做法: 打開繪圖介面的 finder,慢慢找到內部子目錄,然後按滑鼠右鍵開命令列 但我自己習慣的做法是用專案名打個批次檔 比如 iLife 專案: touch iLife //建檔 open -a TextEdit iLife //文字編輯檔案 cd /project/iLife //只打一行,切換子目錄;存檔退出 chmod a+x iLife //改變為可執行屬性 iLife //執行,神奇的是不會切換子目錄 . iLife //用另一種方式執行,可以了!! 以上,想請教的是用 . 去執行就可以,怎麼會這樣? 另外這似乎是比較偏命令列的討論,如果跑錯板尚請告知,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.16.80 ※ 文章網址: https://www.ptt.cc/bbs/MAC/M.1435375315.A.451.html

06/27 11:32, , 1F
有宣告他是 bash shell?
06/27 11:32, 1F
謝謝你開了第一槍 大致搜尋了板上,我以為我問這個是跑錯板 答:沒,我就只有打那麼一行 cd 如果在第一行加入 #!/bin/bash 結果並沒差別 各種 shell 的差異我知道不多,也覺得學下去沒完沒了 所以這問題如果挨罵'你自己不去研究' 我也認了 其實 cd 切換都有成功,只是有一個會退回原子目錄 why? :P ※ 編輯: HuangJC (223.137.16.80), 06/27/2015 11:46:53

06/27 11:53, , 2F
直接執行是再開一個 shell, 裡面做 cd, 不影響原本的
06/27 11:53, 2F

06/27 11:54, , 3F
. = source, 形同在目前 shell 裡 cd
06/27 11:54, 3F
原來如此,所以一直都有差別! 挺糟啊,之前我只要發現可以執行,都會懶得打一點 另外,直接執行無法有打一點的效果? 那我乾脆用 alias 組一些變化出來還比較好用 因為我常要切換的子目錄可不只一個.. ※ 編輯: HuangJC (223.137.16.80), 06/27/2015 11:59:27

06/27 12:08, , 4F
命令打在目前的 shell 跟開出來的 subshell 的差別
06/27 12:08, 4F

06/27 12:08, , 5F
目的是影響 shell 環境時 (cd, env, function, alias)
06/27 12:08, 5F

06/27 12:08, , 6F
在 subshell 執行,執行完就結束,原本的 shell 不受影響
06/27 12:08, 6F

06/27 12:11, , 7F
因此影響目前 shell => source
06/27 12:11, 7F
When a script is run using source it runs within the existing shell 懂了後才看懂這句翻譯 一向我把 source 理解成 執行 然後我就奇怪這指令怎麼命名的 source 是 來源 執行? 如果是我設計,指令會取名為 excute 無法理解,所以電腦的英文根本是另一套文化 ※ 編輯: HuangJC (223.137.16.80), 06/27/2015 12:18:13

06/27 12:16, , 8F
最終目的是開非 shell 的程式(eg gvim) 還是會直接執行
06/27 12:16, 8F

06/27 12:18, , 9F
可以讓該程式需要的環境不會汙染原本 shell
06/27 12:18, 9F

06/27 12:18, , 10F
如果只是要切換目前 shell 的目錄,用 alias 應該就可以了
06/27 12:18, 10F
alias 失敗了,因為我的子目錄含空白 後來用 function 做出來了 :) iLife() { cd /Product/i\ Life } 像這個 iLife function 就是切子目錄到 '/Product/i Life' 那 alias 怎麼下呢? 空白弄死我了 XD ※ 編輯: HuangJC (223.137.16.80), 06/27/2015 12:55:15

06/27 13:18, , 11F
空白前面加反斜線
06/27 13:18, 11F
加了,在 function 的例子裡有用,在 alias 沒用

06/27 13:18, , 12F
另外一種方式是用symbolic link做捷徑 "ln -S my/d
06/27 13:18, 12F

06/27 13:18, , 13F
ir/i\ Life
06/27 13:18, 13F

06/27 13:19, , 14F
ln -S my/dir/i\ Life
06/27 13:19, 14F
symbol link 要小心用啊 我曾想過把所有常見子目錄建在 ~ 目錄上 然後只要一層深度的 cd 就切過去了 但 os 現在會以為我在哪裡? 其他相關相對存取有用嗎? 太複雜了啦... ※ 編輯: HuangJC (223.137.16.80), 06/27/2015 14:25:37

06/27 19:47, , 15F
噢噢抱歉我好像有些沒看清楚 我剛試了alias如果加
06/27 19:47, 15F

06/27 19:47, , 16F
雙引號應該可以
06/27 19:47, 16F

06/27 19:47, , 17F
alias ilife="cd i\ Life"
06/27 19:47, 17F

06/27 21:43, , 18F
這動作感覺alias比較符合你的需求
06/27 21:43, 18F

06/28 11:48, , 19F
source 或 alias 都可達成需求,看那種比較符合習慣
06/28 11:48, 19F
文章代碼(AID): #1LZXRJHH (MAC)