Bir kabuk betiğinde scp ve satır sonu


3

Benim bir .sh uzak dosyadan belirli bir dizine dosya kopyalayan, orijinal dosya adını koruyan bir komut içeren dosya ve ikinci satır sadece bir yorumdur:

scp (host):~/filename.sql ~/
# just a comment

Ben senaryoyu adlandırıyorum dbcopy.sh, onu ev dizinime koyun ve aşağıdaki gibi konsoldan çalıştırın:

sh ~/dbcopy.sh

Sorun, scp komutunu izleyen bir satır sonu nedeniyle, kopyalanan dosyanın orijinal adının yerine bir karakterden (aşağıdaki listede soru işareti olarak gösterilir) oluşan bir adı vardır!

console> ls -l ~
...
-rw-rw-r--  1 (user)  (group)   158327960 26 oct 17:28 ?

Herhangi bir satır sonunu kaldırırsam scp komut her şeyi beklendiği gibi çalışır.

Bu durumu nasıl ele almalıyım?


Kabuk betiğine tam olarak ne yazdığınızı ve betiği nasıl çalıştırdığınızı postalama şansınız var mı?
Tigger

@Tigger, orijinal soruyu güncelledim ve kabuk betiğini gönderdim. Sorunun komutu izleyen bir satır sonu nedeniyle olduğu ortaya çıktı. İlk başta umursamadım, çünkü başlangıçta emri izleyenler sadece yorumdu.
1234ru

Sorunu hiçbir şekilde çoğaltamıyorum. İlk başta başlık eksikliğini düşündüm #!/bin/sh sorun olmuş olabilir ama durum bu değil. Test betiğim başlıklı ve başlıksız olarak çalıştı. Bu hangi işletim sistemi üzerinde? Ayrıca, eklerseniz ne olur echo ~/ önce scp hat?
Tigger

@ Tigger, anladım. Kendime cevabımı oku - gerçekten komik olduğu ortaya çıktı: D Yardımınız için teşekkürler!
1234ru

Yanıtlar:


2

Sorun editörümde satır sonlandırıcı sınırlayıcıydı: kullanılmış \r\n sadece dizilim \n. Böylece son argümanı scp komut sadece değildi ~/ göründüğü gibi. Aslında öyleydi ~/\r.

Böylece, sonunda bir eğik çizgi bulunan bir dizin adı yerine (bu komut bir dosyanın adını koruyan bir dosyayı kopyalamak için komut vermesini emreder - beklediğim davranış), eğik çizgiden sonra biraz daha eklenir. \r kopyalanan dosya için komutun onu yeni bir ad olarak kabul etmesine yol açan karakter.


0

Komut dosyasını veya komut dosyasını nasıl çalıştırdığınızla ilgili bilgileri eklemediniz. Bilmiyorum, aradığınız şeyi cronjob veya farklı bir kullanıcıdan.

Bununla birlikte, aşağıdaki çok temel test komut dosyası (t.sh) FreeBSD'de benim için mükemmel bir şekilde çalışıyor.

#!/bin/sh
echo "Pre test"
scp spider.goo:~/tColor.c ~/
echo "Post test"

Öyle arayın:

sh ./t.sh

Aşağıdaki çıktıyla:

Pre test
Password for tigger@spider:
tColor.c       100% 1805     1.8KB/s   00:00    
Post test

Soruyu düzelttim, temizledim. Bir göz at.
1234ru
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.