2016-07-13 50 views
0

我需要在嵌入在rcp調用中的反引號表達式中使用變量。在rcp命令中使用嵌入變量的反引號表達式

我的初步嘗試:

#!/bin/sh 
release=1 
rcp myserver.foo.com:'`ls -t /path/to/my/${release} | head -n 1`' . 

我想,因爲正在上myserver.foo.com執行回剔表達不具有release變量,這是失敗的,所以參數我ls命令只是/path/to/my/

I read通常eval命令可用於(我認爲)預處理反標值表達式。當我嘗試這種方法:

#!/bin/sh 
release=1 
rcp myserver.foo.com:'`ls -t /path/to/my/eval ${release} | head -n 1`' . 

...反引號表達只是執行爲/path/to/my/eval

如何在此上下文中使用我的反引號表達式中的變量?

要明確:我試圖在遠程服務器上運行,而不是在本地反單引號的代碼(但我需要${release}被前手本地解析)

回答

1

要在運行ls遠程,但將$ release擴展爲本地機器上的值,則需要使用不同的引號。爲了使變量$ release在本地擴展,它需要用雙引號而不是單引號。你可以完成與:

#!/bin/sh 
release=1 
scp myserver.foo.com:'$(ls -t /path/to/my/'"${release}"' | sed 1q)' . 

如果有特殊字符(例如,空格)的文件名,你可能要添加更多的報價:

scp myserver.foo.com:'"$(ls -t /path/to/my/'"${release}"' | sed 1q)"' . 

請注意,你可能要添加完整路徑:

scp myserver.foo.com:/path/to/my/"$release"/'"$(ls -t /path/to/my/'"${release}"' | sed 1q)"' . 
+0

謝謝,但第一個'''需要轉義('\ $')嗎?它在我逃脫之後起作用了...... –

+0

第一個'$'不應該被轉義。 –

+0

看來您發佈的解決方案導致以前的反標命令在本地運行,而不是在'myserver.foo.com'上運行。但是如果我逃避了'$'這個角色的話,那麼......非常感謝!你讓我度過了我的障礙! –

相關問題