2026-07-06
Selecting...
Home Page
reload
Search in this channel...
Punch card
Raw Text (irssi format)
Fork on github
switch to admin mode
Jump to...
redirecting...
Log for
Ubuntu 台灣社群
pm 02:19:52
Terry Sun
有個bash問題想請教一下各位先進
pm 02:20:31
Terry Sun
local command:(Ubuntu 18.04)
ssh_test/
test.sh
; echo ${PIPESTATUS[0]};
+ exit 1
1
ssh command:(Ubuntu 18.04)
ssh
127.0.0.1
"ssh_test/
test.sh
; echo ${PIPESTATUS[0]}"
+ exit 1
0
test.sh
#!/bin/bash
exit 1
pm 02:21:04
Terry Sun
用ssh來執行script時的exit回傳值不同的問題
pm 02:22:04
Terry Sun
正常執行 exit 1 取得回傳值是1,但是改用ssh執行時,卻always取得0
pm 02:23:08
(つ`ω´)つ
test.sh
#!/bin/bash
exit 1
pm 02:23:16
(つ`ω´)つ
這是你的bash內容?
pm 02:23:32
Terry Sun
對
pm 02:23:41
Terry Sun
直接exit 1
pm 02:23:52
(つ`ω´)つ
然後本地執行,跟ssh執行結果不同?
pm 02:24:01
(つ`ω´)つ
你的意思是這樣?
pm 02:24:03
Terry Sun
對
pm 02:24:12
Terry Sun
很怪
pm 02:24:55
(つ`ω´)つ
等大佬回答
pm 02:25:13
(つ`ω´)つ
因為你打成這樣看不太懂 XD
pm 02:26:23
Terry Sun
XD.. sorry... 因為到處找不到答案
pm 02:29:33
Terry Sun
local command:
ssh_test/
test.sh
; echo $?;
+ exit 1
1
ssh command:
ssh
127.0.0.1
"ssh_test/
test.sh
; echo $?"
+ exit 1
0
test.sh
#!/bin/bash
exit 1
pm 03:31:08
自由車上自由人
我想問你一下,用 ssh 進入
127.0.0.1
之後,會到達哪個 directory?
pm 03:34:00
自由車上自由人
另外,引號裡面的兩個命令,是由那種 shell 解譯的? ssh 還是其他?
pm 03:39:51
Terry Sun
預設是home
pm 03:40:32
Terry Sun
.sh宣告的是bin/bash
pm 03:40:42
Terry Sun
應該就是用bash
pm 03:41:15
自由車上自由人
那麼 ssh_test/ 確實是在 home 裡面嗎?
pm 03:41:22
Terry Sun
有
pm 03:41:39
Terry Sun
ssh 執行有run到
pm 03:41:44
Terry Sun
他有exit 1
pm 03:44:08
自由車上自由人
這個宣告是在哪設定的?
pm 03:51:47
Terry Sun
.sh file第一行
pm 03:53:39
杰 森
#!/bin/bash
pm 03:53:47
Terry Sun
執行.sh時,我也有改過強迫用bash來執 /bin/bash
test.sh
,結果一樣
pm 03:54:09
Terry Sun
換一台ubuntu10來測,結果一樣
pm 03:54:33
Ying-Hao Liang
10....?
pm 03:55:02
自由車上自由人
喔你是說那個。但我問的是括號中的字串是誰執行的
pm 03:55:08
Terry Sun
剛好有老機器來試
pm 03:55:25
自由車上自由人
我查到這個:
https://superuser.com/questions/1224938/ssh-host-is-a-login-shell-but-ssh-host-command-is-not
pm 03:59:03
自由車上自由人
試試看:
ssh
127.0.0.1
' bash -c "ssh_test/
test.sh
; echo $?" '
pm 04:00:03
自由車上自由人
注意我用了雙重的引號
pm 04:01:06
杰 森
sudo bash
test.sh
pm 04:01:19
杰 森
一般不都是这么用的嘛
pm 04:02:09
自由車上自由人
沒事不要用 sudo 啦!
pm 04:02:22
Terry Sun
自由大的,我試完結果一樣,回傳0,不是預期的1
pm 04:02:36
杰 森
你可以写exit 0
pm 04:02:42
杰 森
或者exit 1
pm 04:02:52
杰 森
你怎么写程序就怎么运行啊
pm 04:15:14
自由車上自由人
那麼,你直接在 local 執行:
bash -c "ssh_test/
test.sh
; echo $?"
結果又如何?
pm 04:18:00
Terry Sun
結果是0
pm 04:18:06
Terry Sun
跟remote相同
pm 04:19:22
Terry Sun
bash -c ssh_test/
test.sh
; echo $?
pm 04:19:28
Terry Sun
這個結果是1
pm 04:20:09
Terry Sun
有加雙引號跟沒加雙引號,結果居然不同
pm 04:21:42
自由車上自由人
因為執行命令的 shell 不是同一個執行緒,環境設定也不同
pm 04:21:57
Fish Wang
因為你在 local 跑了他啊...
pm 04:22:32
Fish Wang
遠端收到了
...
"ssh_test/
test.sh
; echo 0"
pm 04:22:39
Fish Wang
當然只會吐 0
pm 04:23:07
自由車上自由人
啊!對喔!
pm 04:24:29
Terry Sun
所以應該用單引號
pm 04:24:55
Terry Sun
對
pm 04:24:57
Terry Sun
正解
pm 04:25:24
Terry Sun
Fish大,一語道破
pm 04:26:30
自由車上自由人
是的,原來的 ssh 命令改用單引號應該會正確
pm 04:27:02
Terry Sun
這是變數轉值的問題
pm 04:27:16
Terry Sun
感謝大家的協助
pm 05:06:42
ronmi@tg
https://mywiki.wooledge.org/BashPitfalls
pm 05:07:22
ronmi@tg
讀完可以避掉絕大多數的雷
pm 05:07:39
ronmi@tg
尤其是變數代換的部份
pm 05:08:03
ronmi@tg
搭配
man bash
效果更佳
pm 05:10:37
Ying-Hao Liang
讀完 toeic 990 (x
pm 05:16:47
(つ`ω´)つ
可以寫點字,突然丟連結會怕 XD
pm 05:18:16
ronmi@tg
可能太舊的頁面了,居然沒有 preview
pm 05:19:20
ronmi@tg
嗯,果然也沒有手機版w
pm 05:20:28
ronmi@tg
他英文沒有用很深的單字,慢慢讀應該還 ok 啦。真的不行還可以用大絕招 code speaks 啊w
pm 05:21:05
(つ`ω´)つ
https://mywiki.wooledge.org/BashPitfalls
可以參考這個
pm 05:21:11
(つ`ω´)つ
像這樣
pm 07:32:21
fghdfgn cvxn
created by
mmis1000
and release under
MIT License
GitHub Repo