2016-05-26 16 views
0

したがって、アクセスするスクリプトとファイルは同じもの(ルート)になっています。私はすることができますシェルスクリプトのパスは機能しませんが、シェルの行で動作します

cat flist 

それはそれを印刷します。しかし、スクリプト(または他のファイル)で "cat flist"と呼ぶと、うまくいきません。彼らは両方ともルートになっています。任意のアイデアをどのようにこれを修正するには?また

enter image description here

grep -w "asd" doc.data 
sort -k2,2n doc.data 
head -5 doc.data 

これは、3種類のレポートを出力します。私はそれを最初にしたい、単語asdですべてを取得し、並べ替え、印刷トップ5。これを達成するために私はどのように変更しますか?

+0

WindowsスタイルのCRLFラインエンディアンを使用していますか?もしそうなら、修正してください。 –

+0

どうすれば確認できますか?私はLinuxサーバにWindows上でSSHingしています –

+0

'file yourscriptname' –

答えて

1

スクリプトが実行されているユーザーは、$ PATHの一部としてルートディレクトリ( '/')を持っていない可能性があります。つまり、ルートディレクトリのファイルを参照するには、絶対パス名を指定する必要があります。ルートディレクトリの場合、スラッシュを追加するだけで、 'scriptname'は '/ scriptname'になります。

ほとんどのLinuxアカウントのデフォルト設定には、現在のディレクトリがパスに含まれていませんどちらも、Windowsのやり方です。つまり、同じ場所にいる場合でも、別のスクリプトからスクリプトを実行するために絶対パスを使用する必要があります。 (これはセキュリティ上の理由で良いことだと思っていますので、わかりました。)

私は質問を誤解していますが、これが助けてくれることを願っています。

EDIT:2番目の部分は、好きなようにコマンドを組み合わせたものですが、これはコマンドシェルに関する私の好きなものの1つで、Linuxベースのシェルがよく考慮される理由の1つを示しています通常はWindows上で利用できるものよりフル機能です。 パイプを使用して、あるコマンドの出力を別のコマンドの入力に送ることができます。これを行うには、コマンドをパイプ、または縦棒のcharacter-'|'と組み合わせます。この場合は、試してみてください。

grep -w "asd" doc.data | sort -k2,2n | head -5 

をコマンドsortheadは両方のパイプと互換性のある(それが理にかなっているほとんどのネイティブコマンドがそうであるように)です。つまり、標準入力(STDIN)と標準出力(STDOUT)を使用します。 STDOUTはデフォルトで画面に表示されます。しかし、それはパイプ文字が何をするかです - それは次のコマンドのSTDINに代わりにSTDOUTを送ります。これが理にかなっていて、役に立つと思っています。試してみます!

+0

ああ、ありがとう、それを固定しました。私の問題の2番目の部分についての助け?(別の3つのものを印刷しない) –

+0

私のLinux対Windowsについて言及しておきたいのは、最も一般的なWindowsシェルcmd.exeこれと同様のパイプラインを実装しているように見えるPowershellと呼ばれる別のものですが、少なくとも私の経験では動作するのは難しいようです。 (これは、単なるテキストではなく、データ構造として入出力に作用すると私は考える)。 –

関連する問題